【发布时间】:2015-08-15 04:44:31
【问题描述】:
两者有什么区别?
根据我对一般身份验证工作原理的理解,ID 存储在服务器端和客户端。对于每个请求,客户端都会发送 cookie,匹配服务器中的 ID,并输出所需的数据。因此,当我这样做时:
session_start();
session_id();
cookie 也存储在客户端。这对我来说很有意义,因为在我看来 session_id() 只是在生成该 ID。然后,我们可以将此 ID 存储到(例如)给定用户的用户表中。然后,对于每个浏览器请求,我们只需将 cookie 中的 ID 与数据库中的 ID 进行匹配。
但是,为什么我们不能只使用 ID 进行身份验证?我已经看到在线代码执行以下操作,但我不太明白在$_SESSION 中设置字段的意义是:
session_start();
$_SESSION['username'] = 'Billy Bobby';
【问题讨论】:
-
RTFM: "session_id() 用于获取或设置当前会话的会话 ID。"
-
除非您要求用户输入,否则您还能从哪里获得“Billy Bobby”?
-
为什么不能将名称与ID一起存储在数据库中? (有点像 Rails 中的 session_token)