将会话数据从一个PHP页面传递到另一个页面是高效的


Is passing session data from one PHP page to another efficient?

我想知道使用SESSION变量将数据从一个PHP页面传递到另一个页面是否有效。我之所以这么问,是因为我认为SESSIONS只用于让用户登录网站,并作为cookie的替代品。通过诸如members.php?name=Joe&age=28之类的URI将数据(非敏感)从一个页面传递到另一个页面不是更好吗?

PHP会话将cookie写入浏览器,然后将与该会话相关的数据存储在磁盘上;在下一次加载页面时读取它的成本大约和include()一样高,也就是说,这完全是微不足道的。

此外,用户不能更改会话数据,除非您创建一个允许他们更改的机制;他们可以很容易地处理查询字符串。

简短回答:是的,它很有效。

会话对很多事情都很有用,而不仅仅是登录信息。它们非常适合在POST/redirect/GET周期或任何其他跟踪用户会话状态(因此得名)的过程中保存状态消息,但仅限于当前会话,而不是长期的永久配置选项。

就效率而言,您需要记住,会话中的任何内容都需要序列化&在每次加载页面时未序列化。存储姓名和年龄不会增加太多。添加一兆字节的图像上传可能会很糟糕。

比效率考虑更重要的是要记住,会话数据只是暂时持久的。如果你想一直知道乔28岁,就应该把它放在数据库里。如果它只对单个页面加载有用,那么它可能应该留在URL中或被张贴。如果你有兴趣记住它几分钟,会话可能是放置它的地方。

这取决于你在做什么。如果该页面需要该信息才能正常工作,并且不在登录之后,则可以传递查询字符串(例如搜索结果、产品页面)。如果它在登录之后,那么使用会话可以让你保持URL的干净,也会让用户很难滥用页面(例如,交换查询字符串中的数据)。

是的,您可以在SESSION中存储数据和消息,并且可以从任何页面访问。但请记住,SESSION使用浏览器支持来存储数据。它们可以由用户手动删除