我知道会话是用来跟踪客户端的行为,或者只是像登录一样,如果有会话,显示东西,如果没有,那么他是客人,我们在这个会话中存储同样的值或属性。
到目前为止,我总是在会话中存储用户的ID,作为一个主要属性,可以帮助我在其他页面中识别他。
$_SESSION['userID'] = $userID; //example: 100, 101, 102...
我可以检索这个ID,并根据这个ID从数据库中获取数据。
$userID = $_SESSION['userID'];
$query = "SELECT * FROM posts WHERE user_id = ".$userID;
这是使用Session的正确方式吗?ID不应该存储在会话?是否存在安全风险?如果它不应该被存储,那么我如何识别用户?
是的,在会话中存储userID很好,只是不要用它来认证用户,而是使用认证ID。
除此之外应该没有安全风险。
只是不要用它们存储敏感信息(密码等)。
会话永远不会转移给用户。浏览器获取一个名为PHPSESSID的cookie,其中包含会话ID。
这意味着:无论你在会话中存储什么,它都完全保存在服务器上。
从这个角度来看,会话中的数据不存在安全问题。
在会话范围内存储尽可能少的信息。
原因是在现代浏览器中,相同的会话在相同浏览器实例中的选项卡之间共享,或者在不同的浏览器实例中共享。换句话说,如果你在firefox中打开应用程序,然后再次启动firefox,新的firefox窗口将从旧的窗口继承会话。
现在是不好的部分。如果你有疗程的话。在浏览器1中ABC = 123,然后在浏览器2中做一些事情将其更改为456,然后返回浏览器1并进行某种页面请求(如提交表单),它将使用session的新值。
我们已经被这个烫伤了。有人无意中更新了错误的记录。