2016-09-22 161 views
0

在这种情况下,我在数据库“用户”和“帖子”中有2个表。 第一张表扩展了基本的用户数据(id,名字,姓氏,用户名,邮件,密码等......)第二个关于帖子(id,标题,文本,作者等等)如何将会话数据存储到Codeigniter的数据库中?

所以当用户要创建一个帖子,他需要填写标题字段和文本字段,作者字段应填充直接从会话中拉出的用户名,并将其存储到数据库。

回答

1

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

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

1

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

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

存储在磁盘上的会话没有问题(AFAIK),如果它是一个专用的盒子等,并且您完全控制了代码。当你在一个共享的盒子里时,他们不能被依赖。

+0

所有的尊重,最后一部分是不正确的。基于磁盘的会话在共享主机上运行良好。唯一的'catch'是你需要分配文件夹来保存application/config.php中的会话文件,并且该文件夹应该在具有正确权限的公共根html文件夹之上。这部分可能会让新人感到困惑。否则,如果你有一个特定的用例,基于文件的共享主机会话是不可靠的,我会很感兴趣,听听它是什么。 – cartalot

+0

我明白你的观点。显然,如果服务器安装不好,那么这些会话文件可能会被读取 - 权限,遏制等等存在风险。快速谷歌发现http://eddmann.com/posts/securing-sessions-in-php/反映了这一点在他的标题为“会话内容加密”的部分中指出。 – Antony

0

当您登录时,创建一个将进入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')

相关问题