PHP会话变量未设置

时间:2016-10-05 17:49:12

标签: php session set

我有基于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工作正常,直到我关闭浏览器。

由于

2 个答案:

答案 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将其存储在其他位置。