【问题标题】:PHP session dropped when filename is stripped当文件名被剥离时 PHP 会话被丢弃
【发布时间】:2013-03-08 20:06:37
【问题描述】:

这是一个简单的问题,困扰了我很长一段时间!

我有一个页面www.example.com/dir/index.php,它设置了一个$_SESSION 变量。我在www.example.com/dir/dir2/dostuff.php 上再次访问此变量,效果很好!

但是,如果我通过www.example.com/dir/ 设置会话,则不会在www.example.com/dir/dir2/dostuff.php 中设置。

我已经用

重写了.htaccess
RewriteRule ^.*\/dir\/$ /dir/index.php [NC]

并在 index.php 中设置我的 php.ini:

ini_set('session.cookie_domain', '.example.com');

但是没有结果。 有人有什么建议吗?

更新:

简而言之 index.php 只是运行:

if (!isset($_SESSION)) session_start();
$_SESSION['param'] = "val";

dostuff.php 运行:

if (!isset($_SESSION)) session_start();
echo $_SESSION['param'];

【问题讨论】:

  • 解释一下你是如何设置会话的?
  • index.php 是否包含session_start()?如果它首先重定向到那里,它可能不会使会话保持活动状态。确保在每一页上都调用它。
  • 是的,每个页面都有 session_start()..
  • 你试过session_set_cookie_params吗?
  • 好的,一种解决方案是定义一个文件夹以使用session_save_path('sessions'); 保存会话并使用其相对路径session_save_path('../sessions'); 找到该文件夹​​,但必须有一个更简单的解决方案,对吧?

标签: php .htaccess session ini


【解决方案1】:

来自session_start

session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。

当你想访问_SESSION变量时,你应该无条件地调用session_start()

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多