【问题标题】:session_start() does not set $_SESSION at allsession_start() 根本没有设置 $_SESSION
【发布时间】:2011-05-09 12:40:09
【问题描述】:

我的开发和生产服务器上有以下相同的代码。它适用于开发端,但不适用于生产端:

<?php
$s = session_start();
mail('me@example.com', 'Site-test', "s=$s; SESSION=".serialize($_SESSION), "MIME...");

开发服务器展示:

s=1; SESSION=a:4:{s:20:"user_timezone_region";s:13:"Pacific/Samoa";s:4:"lang";s:1:"1";s:12:"sess_user_id";s:3:"225";s:14:"sess_user_type";s:1:"S";} 

生产服务器显示:

s=1; SESSION=a:0:{} 

我希望诊断的生产服务器上的 PHP 设置有问题。是的,这与我最近的另外两个问题herehere有关。

更多细节:

  • 我在这台服务器上运行了 cPanel
  • PHP error_log 没有报告上面的错误(注意变量's'是'1')
  • 第一个链接中提到了两者在phpinfo()中的区别

【问题讨论】:

  • 只是一个小的健全性检查:似乎您的开发服务器上的 $_SESSION 已在其他地方填充。您在生产中也这样做吗?
  • 在请求之间检查从生产服务器设置的会话 cookie 的 ID。您很可能会看到它在请求之间发生变化,表明正在创建一个全新的(空白)会话。

标签: php session cpanel


【解决方案1】:

第一次为新客户启动会话时,实际上是空的。这可能意味着在开发服务器上,您会看到返回客户端的会话,而在生产服务器上,您会看到第一次使用的客户端的会话。

【讨论】:

    【解决方案2】:

    你为什么用这种奇怪的方式测试你的会话? 为什么不做这么简单的脚本

    <? 
    session_start(); 
    if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
    echo "Page reloaded ".$_SESSION['counter']++." times.<br>
    <a href=".$_SERVER['PHP_SELF'].'?'.session_name().'='.session_id().">reload</a>"; 
    ?>
    

    如果有效,则您的会话可以完美运行,但传递标识符有问题。
    如果不是...应该有一些错误信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2013-05-24
      • 1970-01-01
      • 2013-10-09
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多