CodeIgniter会话与PHP会话

时间:2010-01-05 11:06:20

标签: php codeigniter session

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

CI的会话机制似乎将所有数据存储在cookie中?就个人而言,我喜欢将所有数据存储在服务器上的想法,使用像PHP本机会话机制这样的cookie密钥进行访问...我是不是觉得这样更好?我应该接受CI的机制吗?或者我应该继续使用本机PHP会话?

你们做什么?

谢谢,
马拉

5 个答案:

答案 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 (会话数据被删除为一读就好了。如果您首先使用框架,则意味着这些选项可能对您有吸引力。

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

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

答案 2 :(得分:4)

保留PHP会话以获取重要信息,并使用CI会话获取不太重要的信息。

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

答案 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首曲目的用户音乐播放列表等。

我希望这些信息能够帮助某人。

干杯.. !!