我已经阅读了很多地方,例如,session_start() creates a cookie,session_start() creates a cookie,在php.ini的默认配置下,session_start()创建了一个随机会话ID并将其存储在用户浏览器的cookie中 . 但是,我在php.net找不到任何对此的引用 . 有没有一个地方可以找到一些适当的文档和内部工作?
其次,我想了解一个简单的登录系统如何在PHP中结合上面的顺序逐步过程,即session,生成的sessionID和session_start()设置的相关cookie . 请帮助提供此流程的分步过程,例如: - (假设用户User1已经注册到系统中,现在他正在尝试访问需要登录系统的页面)
-
User1单击URL hxxp://restrictedPage.php(例如)
-
系统检查并看到User1未登录 - 这意味着系统检查是否有明显的有效会话ID . (那究竟要检查什么?)
-
由于在步骤2中检查(我需要帮助)失败,用户被重定向到具有登录表单的login.php(例如) .
-
在登录表单上,用户输入用户名和密码并提交POST表单 .
-
服务器端 - authenticateUser.php(例如)用db值验证$ _POST ['userName']和$ _POST ['password'] . 假设这个检查返回true,即用户提供的用户名和密码是正确的 .
-
从现在开始会发生什么?会话在哪里开始,什么时候创建了sessionID的cookie?什么时候发送到浏览器?
-
现在当会话到位时(我需要帮助以了解具体情况)并且用户在登录后进入登录页面,比如,welcome.php也有一个指向restrictedPage.php的链接,现在当用户点击时在此链接上,如何在服务器上验证会话?我的意思是持有sessionID的cookie将与此请求一起发送,但是在哪里与服务器上已存在的sessionID进行交叉检查?它是显式完成的(就像我们从db验证用户名和密码那样)还是由PHP自动处理?
2 回答
当您调用
session_start()
时,会在开头创建会话(及其cookie,如果还不存在);它通过响应头Set-Cookie发送到浏览器并带有响应有效的会话ID仅显示"This browser has requested a page from me before",仅此而已:PHP检查是否存在该名称的会话(请参阅源以了解这是如何发生的,但这对正常使用并不重要),并将其反序列化为
$_SESSION
.您可以将此与身份验证,授权和标识相结合 - 通常,登录功能会检查用户名和密码,如果正确,则设置会话变量"this is user 1234":
然后在受限制的部分中,您可以检查会话变量:
换句话说,PHP仅根据会话cookie为您创建/恢复
$_SESSION
数组 . 在此之上构建一些东西(例如身份验证)完全取决于您 .咦?我不知道这里真正的问题是什么 .
创建会话时,它将保存在文件夹中的服务器上 . (可配置的)
cookie很重要(没有其他方法可以检查哪个会话属于访问者),所以这是保存内容的唯一方法 .
大多数情况下,你不必关心这样的事情 . (会话)
当用户按下LOG IN按钮(发布表单)时,会在服务器(PHP)上发生这种情况:
1表单的数据位于$ _POST全局(关联数组,INPUT Name => INPUT Value)
2如果值有效,则检查该值是否有效,将值与数据库的值进行比较
3A . 成功登录后,您可以设置有关登录数据的会话 . (例如:$ _SESSION [“login”] = array(“id”=> $ id,“username”=> $ un,“password”=> $ pw);)不要忘记加密密码(从不将普通密码保存到db)
3B . 登录失败,向访问者显示错误 .
4用户已登录,服务器将会话中的数据与db值进行比较
4A . 值继续有效
4B . 值不等于db值,注销用户(删除会话:unset($ _ SESSION [“login”]))
5如果会话数据有效且EXISTS继续,则访问者访问'restrictededPage.php',否则重定向到404或访问者页面
编辑:
Cookie由session_start()设置,因此服务器可以找到分配给访问者的会话(sessionid) .
可以在php的配置中找到cookie的每个配置 .
Cookie值包含单个“字符序列”(?),它是访问者会话的ID . (如果您知道其他访问者的会话ID,则可以将cookie的值更改为其他访问者的ID,因此请勿以任何形式公开ID . )
你可以得到'session_get_cookie_params()'的cookie的参数 .
引用来自PHP的文档:http://sg2.php.net/manual/en/function.session-get-cookie-params.php