【问题标题】:Session_id behaving weirdlySession_id 行为怪异
【发布时间】:2015-12-17 12:27:53
【问题描述】:

所以我有 SessionHandler 类,以及我的其他文件,像这样 (cfg_session.php):

use \Classes\MySessionHandler as Sessao;

$sessao = new Sessao();

// PHP < 5.4
session_set_save_handler( 
   array($sessao, 'open'),
   array($sessao, 'close'),
   array($sessao, 'read'),
   array($sessao, 'write'),
   array($sessao, 'destroy'),
   array($sessao, 'gc')
);

register_shutdown_function('session_write_close');

session_start();

好的,小的区别是我在本地网络中使用:

session_set_save_handler($sessao) 

因为,在我的localweb中,其实是PHP > 5.5。

它在我的本地网络上运行良好,我刷新页面,注销,登录,关闭标签,打开标签,再次登录,一切正常,我浏览器中的 PHPSESSID 等于在会话中创建的文件等等。

编辑:我有一个 PHP

然后,我尝试再次正常登录,它让我登录,就好了。每个请求都具有相同的 ID,session_regenerate_id() 工作正常,一切正常,PHPSESSID 与创建的会话文件匹配。

但是,如果我注销,关闭该选项卡,打开一个新选项卡并尝试登录(或者只是关闭选项卡而不注销),它只会做同样的事情:让我登录,创建一个会话文件,但随后,它再次更改 de session_id 并将我踢出去。

我真的坚持这一点。不能确定这是因为 PHP

注意事项: - session_regenerate_id() 用于登录检查是否有会话(然后更新时间和regenerateId)以及注销

  • cfg_session.php 需要一次在需要使用会话变量的每个页面上

我需要对此有所了解。我已经看到了很多主题,但没有一个非常有用或接近解决这种奇怪的行为。提前致谢。

【问题讨论】:

    标签: php session session-set-save-handler


    【解决方案1】:

    SessionHandlerInterface 类仅适用于 5.4.0 或更高版本。您的代码适用于 PHP 5.4.0 及更高版本。它肯定会给出奇怪的东西

    【讨论】:

    • 我编辑了帖子,看看我是否更清楚,我认为它错过了信息。但问题是:我正在使用 php 低于 5.4 的服务器,我正在使用上面的代码用于低于 5.4 的 PHP,好吗?但它仍然表现得很奇怪。
    • 该功能不适用于5.4以下的php,如果该功能不可用,那么您如何使用它.....
    【解决方案2】:

    如何以编程方式记录 coockie 会话时间? 也许你需要设置会话 cookie 选项

    session_set_cookie_params(3600);
    

    http://php.net/manual/en/function.session-set-cookie-params.php

    【讨论】:

    • 嗯,你的回答让我意识到一件事:“ini_set('session.use_cookies', 1);”。我没有在 PHP 大于 5.4 的服务器上使用它,但是这条线解决了我的问题。谢谢你在潜意识里帮助我嘿嘿。
    【解决方案3】:

    刚刚添加:

    ini_set('session.use_cookies', 1);
    

    问题是:我没有在我的本地网络上使用它,但我读到默认值为 1(真),并且可能在我的实时服务器上,它被设置为 0。现在它可以正常工作了。谢谢。

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 2019-11-03
      • 2012-08-05
      • 2012-12-03
      • 2023-03-02
      相关资源
      最近更新 更多