2013-04-13 63 views
1

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

在chrome中,仅当我使用重写规则时,每个页面的会话id发生更改。当使用重写规则时,曲奇path奇怪地变为/pages_name/,而不是剩余/

在opera中,即使刷新页面,会话ID也会更改。在IE中也是如此。

在这两种情况下,cookies都被浏览器接受。其中

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] 

搜索后,我遇到了一些“解决方案”没有工作

会话保存路径工作,文件被writen。使用默认会话处理程序

设置session.cookie_path/

设置session.cookie_lifetime到其他然后0

我不使用session_regenerate_id

session_start();是代码上

所有页面的第一行如果需要了解更多信息我会更新这篇文章,谢谢。


在进一步研究它原来是与RewriteRule S,不知道如何解决它仍然是一个问题。

另外从session_start()的cookies设置为localhost/home/就好像它是一个文件夹,但它是一个变量localhost/index.php?page=home。正因为如此,每一个页面都有自己的session id,任何想法修复?

+0

您是否检查过正在写入会话文件的路径?是否有越来越多的文件是根据每个请求创建的,或者根本没有? (假设你正在使用默认的会话处理程序)。 – leftclickben

+0

忘了提及,是的路径是好的,越来越多的文件被创建与每个请求。我正在使用默认的会话处理程序。 – MPKaboose

+0

是否有碰巧在URL中传递的会话信息?像在查询字符串? –

回答

1

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

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

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

+0

我没有设置自己的cookie,让PHP去做,用这给了我'未定义指数:session_id' – MPKaboose

+0

的代码在这个答案上班第一行应是'如果(isset($ _ POST [ 'SESSION_ID'])){'(的变化是增加isset的'(...)') – leftclickben

+0

'session_id'从未设置 – MPKaboose