如何在Codeigniter中将会话数据存储到数据库中?

时间:2016-09-22 21:43:24

标签: php mysql codeigniter session

在这种情况下,我在数据库中有2个表"用户"和"帖子"。 第一个表扩展了基本的用户数据(id,名字,姓氏,用户名,邮件,密码等......)第二个是关于帖子(id,title,text,author等...)

因此,当用户要创建帖子时,他需要填写标题字段和文本字段,作者字段应填充直接从会话中提取的用户名并将其存储到db。

3 个答案:

答案 0 :(得分:1)

有不同的方法可以做到这一点,但我建议 - 不要在会话中存储任何用户数据。当用户首次登录时 - 创建一个"令牌"这是一个很长的随机字符串,可能在结尾处有一个日期时间供参考。使用令牌更新users表,并将令牌保存到会话中。

当用户转到另一个页面时 - 您从会话中获取令牌 - 并使用它来从数据库返回用户记录。然后,您可以获得所需的所有用户详细信息。这将使您不再在会话中存储任何用户等细节。这对于安全性来说要好得多,它使您的系统更容易长期处理。否则,您无需在用户进行任何更改时更新用户数据库表和会话。

答案 1 :(得分:1)

这里更好的,可能是safter选项是将您的SESSION数据存储在数据库中。

看看https://www.codeigniter.com/userguide3/libraries/sessions.html。您需要在数据库中创建一个名为ci_sessions的表(或者它可以在配置文件中重命名),然后您可以根据需要从会话中提取用户名。

存储在磁盘上的会话很好(AFAIK),如果它是一个专用的盒子等,你可以完全控制代码。当你在共享的盒子上时,它们是不可靠的。

答案 2 :(得分:0)

登录时,创建一系列将进入cookie和会话数据库的内容;一个例子

if (password_verify($pass1, $stored))
    {
      $data = array(
        'name'         => $row->name,
        'is_logged_in' => TRUE
      );
      $this->session->set_userdata($data);

该名称是用户的db记录的一部分。但不是登录的一部分。当您搜索用户以将其登录时,name是您在查询中包含的内容之一

然后,在您的表单输入中,只需设置set_value = $ this-> session-> userdata(' name')

相关问题