CodeIgniter会话vs PHP会话

我对CodeIgniter比较陌生,正在做我的第一个CI项目,其中有用户帐户等等。过去,我一直使用PHP的$ _SESSIONvariables来达到这个目的。 然而,CI似乎有自己的会话机制,它声称是“更好”

CI的会话机制似乎将所有数据存储在cookie中? 就我个人而言,我喜欢所有数据存储在服务器上的想法,通过像PHP本地会话机制这样的cookie密钥访问…我是否认为这样更好? 我应该接受CI的机制吗? 还是应该继续使用本机PHP会话?

你们做什么?

谢谢,
马拉

根据我在CI方面的经验,我在会议中遇到了一些exception情况,但是对于大多数日常需求来说,图书馆很好,很容易处理。 正如它指出的那样,Flashdata是一个非常好的function。

如果您select继续使用CI的会话,我强烈build议将会话存储在数据库中,另外还要encryptioncookies:

$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) ); 

手册说更多的灵活性,而不是更好的 😉

我认为CodeIgnite会话类的主要优点在于它与框架集成在一起,它提供了一些额外的function,例如IP地址跟踪以及它所称的flashdata (会话数据一旦被读取就被删除)。 如果您首先使用框架,这意味着这些选项可能对您有吸引力。

无论如何,您还可以将会话数据保存到数据库中:

http://codeigniter.com/user_guide/libraries/sessions.html

保持PHP会话的重要信息,并使用CI会话获取较不重要的信息。

在这里阅读wyh。 http://codeigniter.com/forums/viewthread/130577/

我知道这是一个较旧的post,但我觉得值得分享我发现的东西。

由于CI使用基于cookie的方法(即使对于数据库存储),它会为我的特定应用程序(通过curl向远程客户端请求数据提供数据)造成问题。 底线是“cookies”和“跨站点脚本”,虽然可pipe理,但不能很好地协同工作。

我select尝试用我自己的MY_Session.php覆盖CI提供的本地Session.php类。 我很高兴地发现这不是太困难,但是惊奇地发现CI正在重新生成会话ID,即使我的脚本明确地提供了它们。

根据CI手册

用户唯一的会话ID(这是一个统计随机string,具有很强的熵,用MD5进行散列以实现可移植性,并且每五分钟重新生成一次

虽然我可能find一种方法来覆盖这个,但我想知道是否不容易恢复到PHP会话。

如果你打算使用CI,那么只需要考虑一下。

CI会话具有存储大小限制

如你所知,无论你是否encryption,CI会话都基本上都是cookies。 就安全而言,两者都有其优缺点。

我关心的是CI会话的大小限制,它只能保存4KB数据,因为它基本上是一个cookie,而Native PHP会话只在Cookie上存储引用ID,所有会话数据都存储在服务器内存中。 当需要将更多数量的项目存储在会话中时,这会非常方便。

说一个有更多项目的购物车,或者一个拥有超过50首歌曲的用户音乐播放列表等等。

我希望这些信息有一天能帮助别人。

干杯..!!