我正在使用php会话管理我的类别变量。
如果用户像这样点击:
- 指数 类别
- (类别设置会话变量) 产品
- (产品获取该变量)
之后,如果用户没有按主页链接(刷新索引页),而是按下浏览器的后退按钮,则会发生以下情况:
- 用户刚刚到达了之前设置的类别变量的索引页;
- 如果他直接从索引中单击产品,则会显示旧类别。
基本上有没有办法在用户点击浏览器后退按钮(并且页面未刷新)时设置新的会话变量?
这正是您应该保持请求自包含的原因。构建导航所需的所有信息都应以某种方式存在于请求本身中,即在 URL 中。您可以从用户正在查看的产品或请求中已包含的一些其他信息中推断出类别,或者您应该在查询参数 ( ...?cat=42
中传输所选类别。这样,每个请求都表达了自身内部的所有必要信息,并且不会搞砸保存在其他地方的任何单独状态。
如果单击产品,则应从列出该产品的类别中设置当前类别。忽略旧的存储类别,改用产品的类别。
用户单击后退按钮在底层 http 请求方面没有什么特殊或独特的。浏览器要么使用其缓存,甚至不会向 Web 服务器发出另一个请求,要么发出请求,就像单击链接再次获取上一页一样。
你可以用javascript做一些花哨的东西来检测它,但我非常怀疑这将是一个优雅或最好的解决方案。