我在Windows 7(x64)上使用Apache 2.4.4和PHP 5.4.14。我遇到的问题是php会话不坚持。这也发生在Apache 2.2和PHP 5.4.4上,昨天更新,希望它只是php.ini
中的一个糟糕设置,但没有任何改变。
在Chrome中,只有在我使用重写规则时,每个页面的会话ID才会发生变化。使用重写规则时,Cookie path
奇怪地更改为/pages_name/
而不是保留/
。
在Opera中,即使刷新页面,会话ID也会发生变化。在IE中也是如此。
在这两种情况下,浏览器都会接受cookie。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?page=$1&info1=$2&info2=$3 [L]
RewriteRule ^([a-zA-Z]+)/([a-zA-Z0-9]+)/?$ index.php?page=$1&info1=$2 [L]
RewriteRule ^([a-zA-Z]+)/?$ index.php?page=$1 [L]
在搜索之后,我遇到了一些"解决方案"没有一个工作
会话保存路径正在运行,正在写入文件。使用默认会话处理程序。
将session.cookie_path
设为/
将session.cookie_lifetime
设置为其他0
我没有使用session_regenerate_id
session_start( );
是所有网页上的第一行代码
如果需要更多信息,我会更新这篇文章,谢谢。
关于进一步的研究,结果证明是RewriteRule
的一个问题,不知道如何修复它。
此外,来自session_start( )
的Cookie设置为localhost/home/
,就像它是一个文件夹一样,它是一个变量localhost/index.php?page=home
。因此,每个页面都有自己的session id
,任何修复的想法?
答案 0 :(得分:1)
不是按session_start();
开始新会话,而是先检查浏览器是否已发送当前的session_id。
if (isset($_POST['session_id'])) {
$_COOKIE['PHPSESSID'] = $_POST['session_id'];
session_start();
} else {
session_start();
}
如果这不起作用,那么您的PHP和/或Apache配置似乎就会被破坏。 你为什么不尝试默认配置?