我对CodeIgniter比较陌生,正在制作我的第一个CI项目,其中有用户帐户等。过去,我总是使用PHP的$ _SESSION变量。然而,CI似乎有自己的会话机制,它声称是“更好”
CI的会话机制似乎将所有数据存储在cookie中?就个人而言,我喜欢将所有数据存储在服务器上的想法,使用像PHP本机会话机制这样的cookie密钥进行访问...我是不是觉得这样更好?我应该接受CI的机制吗?或者我应该继续使用本机PHP会话?
你们做什么?
谢谢,
马拉
答案 0 :(得分:34)
根据我对CI的体验,我的会话遇到了一些异常现象,但对于大多数日常需求,图书馆很好,也很容易使用。正如有人指出的那样,Flashdata是一个非常好的功能。
如果您选择继续使用CI的会话,我强烈建议您将会话存储在数据库中,另外还要加密Cookie:
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'sessions';
数据库结构应如下:
CREATE TABLE IF NOT EXISTS `sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id)
);
答案 1 :(得分:8)
手册说更灵活而不是更好; - )
我认为CodeIgnite会话类的主要好处是它与框架集成,它提供了一些额外的功能,例如IP地址跟踪及其所谓的 flashdata (会话数据被删除为一读就好了。如果您首先使用框架,则意味着这些选项可能对您有吸引力。
无论如何,您还可以将会话数据保存到数据库中:
答案 2 :(得分:4)
保留PHP会话以获取重要信息,并使用CI会话获取不太重要的信息。
答案 3 :(得分:1)
我知道这是一篇较老的帖子,但我觉得值得分享我发现的内容。
由于CI使用基于cookie的方法(即使使用数据库存储),因此导致我的特定应用程序出现问题,该应用程序向通过curl请求数据的远程客户端提供数据。最重要的是Cookies和Cross Site Scripting,虽然可管理,但不能很好地协同工作。
我选择尝试使用我自己的MY_Session.php覆盖CI提供的本机Session.php类。我很高兴发现这并不太难,但我很惊讶地发现CI正在重新生成会话ID,即使我的脚本明确提供了它们。
根据CI手册
用户的唯一会话ID(这是一个统计上随机的字符串 具有非常强的熵,用MD5进行散列以便于携带,以及 每五分钟重新生成(默认情况下))
虽然我可能找到一种方法来覆盖它,但我想知道恢复PHP会话是否更容易。
如果您打算使用CI,那只是值得深思。
答案 4 :(得分:1)
CI会话存储大小限制
如您所知,CI会话基本上是cookie,无论您是否对其进行加密。就安全而言,两者都有利有弊。
我担心的是CI会话的大小限制,它只能容纳4 kb数据,因为它基本上是一个cookie,而Native PHP会话只存储cookie上的引用ID,所有会话数据都存储在服务器内存中。当您需要在会话中存储大量项目时,这很方便。
说出包含更多商品的购物车,或者包含超过50首曲目的用户音乐播放列表等。
我希望这些信息能够帮助某人。
干杯.. !!