【问题标题】:Are CI Sessions affected by network?CI Sessions 是否受网络影响?
【发布时间】:2018-11-26 09:02:22
【问题描述】:

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

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

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

【问题讨论】:

  • 什么版本的 CodeIgniter?我认为在版本 2 之前,IP 地址是会话的一部分,当它发生变化时,您会自动注销。

标签: php codeigniter session


【解决方案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 和请求的 IP 不同,那么根据提到的代码,该会话将被销毁。

谢谢。

【讨论】:

  • 它工作但我不明白,即使将其设置为 false 为什么它首先进入循环......??
【解决方案2】:

如果 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;

【讨论】:

  • 嘿@javier,我面临同样的问题。我正在使用 ci2,我的 sess_match_ip 是假的。我已经对数据库进行了建议的更改,但我仍然面临同样的问题。我观察到的一件事是,我的网站在与具有 ipv6 的网络连接时工作正常,但在使用 ipv4 网络时取消设置会话.... 是否有可能数据包在 ci 中的 ipv4 网络中丢失??
  • 好问题,我从未见过(尽管这并不意味着它不会发生)。 CI2 的会话类与 CI3 的会话库有点不同。快速浏览 CI2 的文档并没有说明关于 IPv4 与 IPv6 的内容,但它确实暗示 IP 地址是会话数据的一部分,因此那里可能会发生一些冲突(这在某种程度上与会话类允许设置 @ 987654329@ 为假):codeigniter.com/userguide2/libraries/sessions.html 可以尝试在没有默认添加的 IP 地址的情况下设置会话数据吗?
猜你喜欢
  • 2015-05-11
  • 2020-01-23
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多