PHP:用户登录会话和cookie
对不起,我是新手!我正在制作一个小网站,允许用户创建自己的帐户。这不是一个银行系统,也不太可能有人想入侵它。这就是说,我正试图使它合理地安全,因为有很多无聊的脚本孩子在那里 有人能描述一个用户登录的基本工作流程,并且有一个cookie集可以让他们登录30天吗 目前,我有以下几点:PHP:用户登录会话和cookie,php,session-state,session-cookies,Php,Session State,Session Cookies,对不起,我是新手!我正在制作一个小网站,允许用户创建自己的帐户。这不是一个银行系统,也不太可能有人想入侵它。这就是说,我正试图使它合理地安全,因为有很多无聊的脚本孩子在那里 有人能描述一个用户登录的基本工作流程,并且有一个cookie集可以让他们登录30天吗 目前,我有以下几点: 验证和清理输入的数据 根据数据库中的bcrypt哈希密码检查提供的凭据 如果正确,则调用“登录”功能 登录功能: a。使用userID从数据库中删除任何会话数据(表中有两列:SessionString和userI
B将新会话数据添加到DB(新的随机生成的字符串和用户ID)。
C将随机生成的字符串和用户ID写入cookie。
D使用
$UserID
设置$\u会话(“UserID”)
$\u会话(“UserID”)
仍然为空。。。我猜是因为我不能在任何时候写$\u SESSION
即使修复了,我如何使用存储在cookie中的数据登录用户?我猜我不想在每次加载页面时都转到数据库。它仍然需要我创建一个数据库对象来查看cookie中的凭据是否正常。这是去这的路吗
再次为这个新手问题道歉
更新:
是的,我确实理解
$\u会话
变量和cookie之间的区别。我在每页的顶部都有session\u start()
(就在之后)您是否编写了一个自定义会话处理程序,将会话文件存储在数据库中?我想您没有
如果要使用$\u SESSION
,还必须执行SESSION\u start()
。使用PHP会话时,将为您设置用于标识用户的cookie。您还将在/tmp目录中创建会话文件。这是变量的位置,您分配给$\u SESSION
的任何内容都将被存储
除非您定义一个自定义会话处理程序来管理会话文件的位置,否则您不需要查询数据库。只需将用户凭据保存在$\u session
中即可
PS:您可以像这样访问数组:$\u SESSION[“UserID”]
,而不是使用()
您可能想看看这篇文章,在这篇文章中,我已经讨论了各种类型的会话劫持以及如何避免它
首先,会话和cookie之间有一个重要区别。当您使用$\u会话[“.”]
时,您正在创建一个会话(与驻留在客户端的cookie相比,会话驻留在服务器上),即使浏览器使用cookie跟踪会话id。要创建cookie,您将使用该方法
也就是说,我建议您通读这本书,它是一本关于如何创建安全登录脚本的分步指南,使用cookie的持久性来实现“记住我”功能。详细描述如何实现这一点,恐怕要获得如此广泛的答案
旁注:
为了能够写入会话,您可能必须在使用$\u session[“.”获取或设置会话变量之前调用session_start();
我不确定您是否已经这样做了..但是您是否已经完成了setcookie?如果是,那么使用$\u COOKIE您可以访问信息并完成登录部分。在执行setcookie时,您可以将过期时间设置为30天。我已经更新了我的原始问题。我已经完成了会话\u start()
在顶部,但由于某些原因,某些会话变量没有被设置。Argh@DjangoReinhardt因为我们在问题中没有看到这部分代码,所以这是一个有点难解决的问题,但是如果一些会话变量被设置,而另一些没有设置,我的第一个猜测是您将会话变量名UserID
拼错了,比如userId
或userId
或类似的东西-因为变量名区分大小写。是的,这是一个奇怪的名称,但它位于代码的不同部分。我会继续挖掘。谢谢你的帮助。
<?php
session_start();
if(!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = true;
}