【问题标题】:Why session expires automatically with codeigniter ? if use ajax calling on webpage [duplicate]为什么会话使用 codeigniter 自动过期?如果在网页上使用ajax调用[重复]
【发布时间】:2013-04-05 08:38:15
【问题描述】:

我是 php codeigniter 会话的新人。我在我的网站上有一个关于会话到期的问题。 我正在使用 ajax coll 在我们的网站页面上加载广告 div,并添加到购物车功能以在同一页面上添加多个产品。但是由于会话在批准后过期,我的购物车添加的产品是空的。 4-5分钟。 我对这个问题做了很多研究。我认为我的站点会话由于 ajax 和同时更新会话 ID 而过期。但我不确定。

我已经配置了 config.php 文件,比如 -

$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration']  = 0;
$config['sess_encrypt_cookie']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_table_name']  = 'ci_sessions';
$config['sess_match_ip']    = FALSE;
$config['sess_match_useragent']= TRUE;
$config['sess_time_to_update'] = 300;

我还创建了表(ci_sessions)。

请给我一个解决此问题的解决方案。

谢谢。

【问题讨论】:

  • codeigniter 什么版本?
  • @Charlie,我正在使用 codeigniter 1.7.2。
  • 拜托,请给出这个问题的简单解决方案,因为我是 codeigniter 的新手
  • 既然你是 CI 新手,为什么不直接使用新版本?
  • 你有两个答案,仍然没有正确的解决方案??

标签: php jquery ajax codeigniter session


【解决方案1】:

去年CI中有一个session.php补丁解决了ajax+session过期问题请看下面的补丁LINK HERE

【讨论】:

    【解决方案2】:

    只要确定,有两个选择。

    1.将system\libraries\Session.php替换为this one

    2.扩展你原来的 session.php 像@undefined answer。

    如果你做第一件事,那么不要做第二件事,反之亦然。

    我不知道更多。祝你好运!

    【讨论】:

    • 谢谢先生。我完全满意
    • 哪一个能用?
    • 您的第一个选项在 system\libraries\input.php 文件中添加 is_ajax_request() 效果很好。感谢您的回复。
    【解决方案3】:

    这是一个 CI 漏洞,发送 Ajax 请求时会破坏会话,您可以扩展 CI_Session 类并仅在请求不是 Ajax 时调用sess_update

    class MY_Session extends CI_Session
    {
        function sess_update()
        {
            // Listen to HTTP_X_REQUESTED_WITH
            if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
                parent::sess_update();
            }
        }
    }
    

    为了加载MY_Session 类,您可以将此函数添加到您的config 文件中:

    function __autoload($classname) {
        if (strpos($classname, 'CI_') !== 0) {
            $file = APPPATH . 'libraries/' . $classname . '.php';
            if (file_exists($file) && is_file($file)) {
                @include_once($file);
            }
        }
    }
    

    【讨论】:

    • 您愿意帮忙吗?见上面的 cmets。谢谢。
    • @Charlie 当然,我已经更新了答案。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2016-02-07
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多