【发布时间】:2013-04-13 10:10:40
【问题描述】:
我在 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/ 而不是保持 /。
在歌剧中,即使我刷新页面,会话 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( );是所有页面的第一行代码
如果需要更多信息,我会更新这篇文章,谢谢。
进一步研究发现这是RewriteRules 的问题,尚不知道如何解决。
同样来自session_start( ) 的cookie 设置为localhost/home/,就好像它是一个文件夹但它是一个变量localhost/index.php?page=home。因此,每个页面都有自己的session id,有什么解决办法吗?
【问题讨论】:
-
您是否检查过写入会话文件的路径?每个请求都会创建越来越多的文件,还是根本没有? (假设您使用的是默认会话处理程序)。
-
忘了提到,是的,路径很好,每个请求都会创建越来越多的文件。我正在使用默认会话处理程序。
-
URL中是否有传递会话信息?就像在查询字符串中一样?
-
不,
session.use_trans_sid是0
标签: php apache session mod-rewrite