在这种情况下,我在数据库“用户”和“帖子”中有2个表。 第一张表扩展了基本的用户数据(id,名字,姓氏,用户名,邮件,密码等......)第二个关于帖子(id,标题,文本,作者等等)如何将会话数据存储到Codeigniter的数据库中?
所以当用户要创建一个帖子,他需要填写标题字段和文本字段,作者字段应填充直接从会话中拉出的用户名,并将其存储到数据库。
在这种情况下,我在数据库“用户”和“帖子”中有2个表。 第一张表扩展了基本的用户数据(id,名字,姓氏,用户名,邮件,密码等......)第二个关于帖子(id,标题,文本,作者等等)如何将会话数据存储到Codeigniter的数据库中?
所以当用户要创建一个帖子,他需要填写标题字段和文本字段,作者字段应填充直接从会话中拉出的用户名,并将其存储到数据库。
有不同的方法可以做到这一点,但我建议 - 不要在会话中存储任何用户数据。当用户首次登录时 - 创建一个“令牌”,它是一个很长的随机字符串,可能在其末尾有一个日期时间以供参考。使用令牌更新用户表,并将令牌保存到会话中。
当用户转到另一个页面时 - 您从会话中获取令牌 - 并使用它从数据库返回用户记录。然后,您可以根据需要获得所有用户的详细信息。这会让你摆脱在会话中存储任何用户等习惯的习惯。这对安全性来说更好,它使得你的系统更容易处理长期。否则,只要用户进行任何更改,您都必须更新用户数据库表和会话。
您的更好的和可能的safter选项在这里是将您的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')
所有的尊重,最后一部分是不正确的。基于磁盘的会话在共享主机上运行良好。唯一的'catch'是你需要分配文件夹来保存application/config.php中的会话文件,并且该文件夹应该在具有正确权限的公共根html文件夹之上。这部分可能会让新人感到困惑。否则,如果你有一个特定的用例,基于文件的共享主机会话是不可靠的,我会很感兴趣,听听它是什么。 – cartalot
我明白你的观点。显然,如果服务器安装不好,那么这些会话文件可能会被读取 - 权限,遏制等等存在风险。快速谷歌发现http://eddmann.com/posts/securing-sessions-in-php/反映了这一点在他的标题为“会话内容加密”的部分中指出。 – Antony