PHP中$_SESSION的正确用法


What is the Proper Usage of $_SESSION in PHP

根据php网站,php中的会话支持包括在后续访问中保留某些数据的方法。这使您能够构建更多的自定义应用程序,并增加您的网站的吸引力。访问您网站的访问者被分配一个唯一的id,即所谓的会话id。这要么存储在用户端的cookie中,要么在URL中传播。会话支持允许您注册任意数量的变量,以便在请求之间保留。

根据这里程序员的经验,我想知道在$_SESSION中应该存储的内容是什么,以及不应该内容是什么。例如,将数据存储在会话中以避免对数据库的重复查询是一个好主意吗?

只存储维护状态所需的内容(ID、高使用率的小块数据等)。

如果性能开始受到查询滥用的影响,可以将数据库结果缓存到适当的缓存层(memcached, APC等)。

我会避免在会话中存储复杂的结构,否则会位于其他数据存储区域(例如DB)。保持简单。

更新

另一个流行的用法是在处理之前存储临时数据。一个例子是多页面/向导样式的表单。

我自己是一个初学者php程序员,但我有一个完美的经验使用会话。

  1. 你可以使用会话与任何数据我认为。我主要使用它们将用户的输入和查询输出从一个页面转移到另一个

  2. 需要注意的一点是,当您使用会话时,请在"单向"页面路径上使用它们。我的意思是,如果你有数据通过会话从page1传输到page2,不要从page1以外的任何页面访问page2,否则你将在page2中没有会话输出。

希望我没有让你困惑。我想帮你一点忙

谢谢:)

您确实可以通过将数据放在会话中来避免数据库查询,但只是为了避免多次访问数据库。例如,像Drupal这样的系统将会话数据放在数据库中,因此用在会话中存储数据来代替单个数据库查询可能没有任何好处。您可以使用会话作为个人数据缓存,而不是太大的数据量。

会话的问题在于它们是全局的。每个用户,或者更确切地说,每个浏览器,是的,但仍然是全局的。用会话跟踪表单验证流,在最简单的实现中,只有当用户在浏览器中打开的表单不超过一个时才能正常工作;就像在网络邮件中,你一次只能登录到一个邮件帐户。

如果你使用会话来跟踪表单流,最好每个表单有一个唯一的表单id,每个表单id跟踪流:把表单数据放在一个由表单id键控的子数组中,而不是在根级。您可能需要添加逻辑来防止这些数据永远挂在那里,这样它就会不断增长,要么限制生命周期,要么限制活动表单的数量(使用"最近最少使用"来决定在满后清除哪个表单),或者两者都有。

任何公开使用不会引起任何问题的信息

会话的一个很好的用途是跟踪购物车中的商品,尽管在结帐时您总是希望从数据库中获取商品。

会话派上用场的最常见场景是保留用户标识。通常,这只需要保留用户id或与当前登录用户相关的数据数组。

我认为唯一不能存储的数据类型是资源。这个限制是有原因的:)

使用会话作为缓存机制是错误的。你应该不惜一切代价避免这种情况。如果您追求缓存,还有其他可用的解决方案(例如xcache, apc)。