1

我在 Windows 7 (x64) 上使用 Apache 2.4.4 和 PHP 5.4.14。我遇到的问题是 php 会话不坚持。这也发生在 Apache 2.2 和 PHP 5.4.4 上,昨天更新,希望它只是一个糟糕的设置php.ini,但没有任何改变。

在 chrome 中,只有当我使用重写规则时,每个页面的会话 id 都会发生变化。当使用重写规则时,cookiepath会奇怪地更改为/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 的一个问题,不知道如何解决它。

来自的 cookiesession_start( )也设置localhost/home/为好像,它是一个文件夹,但它是一个变量localhost/index.php?page=home。正因为如此,每一页都有自己的session id,有什么解决办法吗?

4

1 回答 1

1

session_start();首先检查浏览器是否已发送当前 session_id,而不是通过 开始新会话。

if (isset($_POST['session_id'])) {
    $_COOKIE['PHPSESSID'] = $_POST['session_id'];
    session_start();
} else {
    session_start();
}

如果这不起作用,那么您的 PHP 和/或 Apache 配置似乎已损坏。你为什么不尝试默认配置?

于 2013-04-13T10:32:26.410 回答