gpt4 book ai didi

php - Codeigniter session 表结构

转载 作者:行者123 更新时间:2023-11-29 01:57:54 24 4
gpt4 key购买 nike

想明白为什么CI的session表结构有这三个主键:session_id, ip_addressuser_agent

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(45) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id, ip_address, user_agent),
KEY `last_activity_idx` (`last_activity`)
);

请尽量解释,另外,我想听听改进这个结构的建议。为什么 ip_addressuser_agent 是主键,而不仅仅是索引?有什么区别?

另外一个信息,这个表在每个用户访问系统时都加了一行,所以,非常臃肿。

编辑:想到的另一个问题。我为什么要关心用户代理匹配?

最佳答案

这里的想法是每个 session 都是独一无二的。它如何识别 session ?通过主键中的三个值:session_idip_addressuser_agent

如果你仔细想想,这是有道理的:

  1. 如果 session_id 发生变化,那么(显然)您正在处理不同的(新) session 。
  2. 如果 ip_addess 发生变化,则表明某人正在从另一台 PC 登录 - 这将是一个新 session 。
  3. 如果 user_agent 值发生变化,则表明有人使用了不同的浏览器 - 同样,这将是一个新 session 。

想象一下,只有 session_id 是主键:更改 ip_addressuser_agent 只会更新 的现有行>session_id。如果是这样的话,只知道 session_id 就可以让我在另一台 PC 上或使用不同的浏览器继续同一 session ,这可能是一个安全问题。

您还写道“此表为每个用户访问系统添加了一行,因此,它非常臃肿”。我不确定你是说每次用户 A 访问系统时它都会添加一行(这在我的应用程序中是错误的,我刚刚测试过)或者你的意思是它为每个访问系统的用户添加一行(这是真的,以及它应该工作的方式——每个使用该系统的用户都有一个 session )。也许你可以澄清最后一条评论。

关于php - Codeigniter session 表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com