session 在生成的文件之外始终为空

Posted

技术标签:

【中文标题】session 在生成的文件之外始终为空【英文标题】:session is always empty outside of the file where is generated 【发布时间】:2012-11-02 00:30:38 【问题描述】:

当我在另一个页面中尝试 var_dump 时,为什么会得到一个空的会话数组? 在服务器中,会话存储没有任何内容,只有 id 的名称。 使用 cookie 一切正常。有时(是的,有时),我重新启动服务器,然后会话也运行良好。什么可能导致此问题?

也许是 php 5.1.6 的错误?还是服务器配置有问题?

index_2.php

<?php
session_start();
$_SESSION['xxx'] = "tessstsse";
var_dump($_SESSION);//here show the correct session
header( 'Location: index_3.php');

index_3.php

<?php
session_start();
var_dump($_SESSION);

这个输出将是:

array
  empty

【问题讨论】:

在两个脚本中执行echo session_id();。如果 ID 发生变化,那么您遇到了 cookie 问题,并且每次都会获得一个新的/干净的会话。 @MarcB 我在两个文件中有相同的 session_id。 还要检查是否有过度热情的清理脚本删除会话文件,和/或 php(session.gc_maxliftime 和公司)中的会话到期设置太快了 也许你应该检查 /var/php_sessions 中的会话保存路径是否可被 Web 服务器写入。 @MarcB 这是我服务器中会话的配置:tny.cz/b841923f 【参考方案1】:

试一试..如果可行,我会重新检查您的代码,否则可能是您的服务器有问题...

page1.php

<?php
    session_start();
    $_SESSION['auth'] = "true";
    $_SESSION['superhero'] = "batman";
?>
<a href="page2.php">Click here</a>

page2.php

<?php
    session_start(); // start the session before using it
    //echo $_SESSION['auth']; // will output 'true'
    print_r($_SESSION); 
?>

destroy.php

<?php
    session_start(); // start the session before using it
    session_destroy(); // deletes the current session..
?>

【讨论】:

它通常应该输出一个包含 auth 和 superhero 的数组。我会尝试把 session_destroy();在一个页面中 - 运行它 - 然后从上面运行我的代码,看看是否有任何变化。我会将 session_destroy() 添加到我上面的代码中。 我看不到销毁会话将如何解决问题。 我认为您对当前会话有疑问。删除当前的并创建一个新的将是值得的。这样,您将能够缩小问题所在的范围。例如,如果您无法创建新会话,则可能是您没有足够的权限。这不会修复您当前的会话,但如果当前会话有问题,它会给您一个干净的状态。【参考方案2】:

我的网络服务器没有空间来存储会话内容。

0% 的可用空间。删除一些数据,问题就解决了。

【讨论】:

以上是关于session 在生成的文件之外始终为空的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net 会话在 ashx 文件中为空

SESSION.INVALIDATE()

Web Api 中的自签名证书始终为空

cookie和session

Listener

onActivityResult 返回 Intent data.getData();仅在棉花糖和棒棒糖中始终为空