CI会话是否受网络影响?

时间:2018-11-26 09:02:22

标签: php codeigniter session

我有一个用codeigniter编写的应用程序。 我使用CI提供的会话库进行会话管理。 它是实时部署的。

当我将应用程序连接到我的实验室(学院)网络中的WiFi或LAN时,会话数据将被随机取消设置。然后该应用程序注销当前用户。

但是当我将其连接到热点时,它可以正常工作。 所以我想问一下会话是否受网络类型的影响。

2 个答案:

答案 0 :(得分:1)

监视日志后, 我了解以下几点,

  • 会话库sess_match_ip中有一个参数
  • 首先,您必须将其设置为false
  • 然后,您必须检查会话库中的以下循环是否正在执行,

    if ($this->sess_match_ip == TRUE AND $session['ip_address'] != $this->CI>input->ip_address())
    
        {
            $this->sess_destroy();
            return FALSE;
        }
    
  • 如果是,那么您需要注释掉循环或完全删除该代码块。 我知道这不是永久解决方案,但对我有用。

发生这种情况的原因是

某些网络非常快速地切换ip,因此,根据提到的代码,如果令牌创建和请求时的IP不同,则该会话将被破坏。

谢谢。

答案 1 :(得分:0)

如果您登录时更改了IP ,并且似乎导致用户注销,则可能是因为可以配置(或不配置)CI会话来强制绑定会话到一个IP地址。请注意,虽然这很容易配置,但是如果您使用CI的数据库驱动程序获取会话数据,则需要根据分配给此参数的值来更改会话表

  

application / config / config.php

| 'sess_match_ip'
|
|   Whether to match the user's IP address when reading the session data.
|
|   WARNING: If you're using the database driver, don't forget to update
|            your session table's PRIMARY KEY when changing this setting.

$config['sess_match_ip'] = FALSE;

FALSE设置为值将允许用户即使IP更改也保持登录状态。您的会话配置可能设置为TRUE,这意味着不同的客户端IP将导致会话不再有效。

如果您不使用数据库作为会话驱动程序,则只需更改sess_match_ip参数即可。 如果您使用数据库进行会话,则需要执行的更改位于CI文档中:

Session Library

具体来说,这个:

You will also need to add a PRIMARY KEY depending on your ‘sess_match_ip’ setting. The examples below work both on MySQL and PostgreSQL:

// When sess_match_ip = TRUE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id, ip_address);

// When sess_match_ip = FALSE
ALTER TABLE ci_sessions ADD PRIMARY KEY (id);

// To drop a previously created primary key (use when changing the setting)
ALTER TABLE ci_sessions DROP PRIMARY KEY;