我有基于cpanel的centos服务器。
我面临的问题是会话变量在页面中不可用。
我检查了所有服务器设置,但无法知道我错过了什么。
<?php
session_start();
// index.php
echo "session id = " .session_id();
$_SESSION["username"] = "Niraj";
echo '<br />Lets see if session available in page 2 -> <a href="page2.php">page 2</a>';
if (!is_writable(session_save_path())) {
echo '<br><br><br><br>Session path "'.session_save_path().'" is not writable for PHP!';
}
else
{
echo '<br><br><br><br>Session path "'.session_save_path().'" is writable for PHP!';
}
?>
输出上面的index.php如下:
session id = 5f59e48f328ef72fda877c8a9f7a07ca
Lets see if session available in page 2 -> page 2
Session path "/var/tmp" is writable for PHP!
如果我刷新页面,则会话ID保持不变。
page2.php代码如下:
<?php
session_start();
//page2.php
echo "session id = " .session_id();
echo "<br> Username = " . $_SESSION["username"];
?>
输出page2.php,如下所示:
session id =d99088ca0027a483301746e02282662c
Username =
问题是用户名不输出任何会话值。临时目录是可写的,浏览器支持cookie。
我标记了当点击page2.php时,它会在会话ID中显示新值,是否可以,或者会话ID在所有页面中保持相同?
自从过去2天以来,我尝试了所有的东西并放了很多effords, 相同的代码与其他Windows服务器和会话ID工作正常,直到我关闭浏览器。
由于
答案 0 :(得分:0)
session_id()
必须保持相同,才能查询设置为该会话ID的数据。会话ID(取决于生命周期值)将一直与您保持一致,直到浏览器关闭。我怀疑您的浏览器阻止了会话cookie,这导致PHP在每次加载页面时重新生成新的ID。下载以前没有使用的新浏览器并测试理论,让我知道你是如何进行的。
如果您愿意,可以查看全局会话cookie值并查看生命周期设置的内容,但我打赌浏览器(0 ==生命周期 - &gt;直到浏览器关闭)。
var_dump(session_get_cookie_params());
http://php.net/manual/en/function.session-get-cookie-params.php
另外....
您可以停用任何特别容易停止广告的插件,例如Adblocker等等。
答案 1 :(得分:0)
您是否看到/var/tmp
中的会话文件发生了什么奇怪的事情?服务器可以删除它们吗?
MediaTemple Grid服务器在保存到tmp文件夹时似乎存在会话问题。我知道您可能没有使用MediaTemple,但他们的DV服务器运行CentOS,因此它可能与操作系统有关。
https://mediatemple.net/community/products/grid/204643480/why-am-i-experiencing-session-errors
他们列出的感兴趣的症状是“会话的一般问题似乎不是跨Web请求进行的”。他们的解决方案是从tmp文件夹中获取会话文件,并通过在php.ini中设置session.save_path
并重新启动apache将其存储在其他位置。