繁体   English   中英

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

[英]How to store session data into database in Codeigniter?

在这种情况下,数据库“ users”和“ posts”中有2个表。 第一个表扩展了基本的用户数据(ID,名,姓,用户名,邮件,密码等)。第二个表是关于帖子(ID,标题,文本,作者等)的。

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

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

当用户转到另一个页面时-您从会话中获取令牌-并使用该令牌从数据库中返回用户记录。 然后,您将拥有所需的所有用户详细信息。 这将使您摆脱在会话中存储任何用户等详细信息的习惯。 这对于安全性而言要好得多,并且可以使您的系统更易于长期处理。 否则,您必须在用户进行任何更改时都必须更新用户数据库表和会话。

这里最好的选择也许是将SESSION数据存储在数据库本身中。

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

如果磁盘上的会话专用框等有效,则可以很好地存储在磁盘上(AFAIK),并且您可以完全控制代码。 当您位于共享框中时,就不能依赖它们。

登录时,创建一个将放入Cookie和会话数据库的事物数组; 一个例子

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM