[英]Session regenerate id and session_save_path( );
您好,我的脚本如下:
<?php
session_save_path('sessions/');
if (!isset($_SESSION)) {
session_start();
}
$loginUsername = A;
if (PHP_VERSION >= 5.1) {session_regenerate_id(true); } else {session_regenerate_id();}
$_SESSION['wallet_email'] = $loginUsername;
echo $_SESSION['wallet_email']
?>
现在我注意到,一旦生成了新的会话ID,我就会丢失在“ session_save_path('sessions /')”中指定的路径。 这意味着我无法创建新的会话。
我实际上收到以下错误。
Warning: Unknown: open(sessions//sess_7af5c5f2f2bd83afff0203cc45190260, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (sessions/) in Unknown on line 0
请为此我需要紧急帮助。
如前所述,为session_save_path( )
的参数使用绝对路径。 这就是为什么。
当您使用相对路径作为前者的参数时, session_save_path( )
和session_regenerate_id( )
不能很好地配合使用。 在我的设置(Windows 7,Apache 2.2.25,php 5.3.27)上,我在c:\\ www \\ test中具有以下index.php:
<?php
date_default_timezone_set( 'America/New_York' );
ini_set( 'session.save_path', './sessions' );
//ini_set( 'session.save_path', 'c:/www/test/sessions' );
session_start( );
if ( !isset( $_SESSION[ 'count' ] )) {
$_SESSION[ 'count' ] = 0;
}
$s1 = session_id( );
$b1 = $_SESSION[ 'count' ]++;
//session_regenerate_id( true );
$s2 = session_id( );
$b2 = $_SESSION[ 'count' ]++;
?>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<p><?php echo "$s1: $b1"; ?></p>
<p><?php echo "$s2: $b2"; ?></p>
</body>
</html>
就像您想的那样工作。 当我浏览到脚本时:
当我取消注释session_regenerate_id()命令并浏览到我的脚本时:
当我改为使用第二个ini_set命令(具有完整路径)时,它可以正常工作。
问题似乎是regen函数混淆了PHP:在重新生成后,PHP将会话文件写入c:\\ Program Files \\ Apache Software Foundation \\ Apache2.2 \\ sessions-或尝试这样做,但是如果该目录包含以下内容,则失败尚未创建。 创建第二个会话目录后,我看到会话文件显示在那里。 但是,当我调用session_start()时,PHP不在那儿,因此在脚本调用之间会丢失所有累积的会话知识。
我只是想出这一点,因为我没有在“ php_errors.log”中收到“目录不存在”错误消息-至少不是我期望的那样。 我在Apache2.2目录中发现了该名称的另一个文件。 在php.ini中,我为我的error_log指令指定了一个简单的文件名,没有目录路径。 在regen命令之前生成的所有错误消息都将到达c:\\ www \\ test \\ php_errors.log,但在重新生成之后,然后将其转到Apache目录中的文件。 因此,引起混乱的原因似乎超出了会话功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.