Bys*_*son 6 html javascript php session
请耐心解释,这是必要的.
系统背景:
我正在为CMS的后端创建父 - >子导航系统.我这样构建网址:[domain.ext]/[moduleName]/[objectName]/[actionName]/[ID #1]/[ID #2].
URL解释(例如example.com/PageManagement/Page/Modify/7/13):
通过解析其组件的URL,将名称减少到系统ID等,然后检索要在页面上显示的字段和数据来进行导航.
为了确保URL保持可读性和逻辑上可理解性,我不会在URL中添加多个父ID层,而是将最后几个父ID保存在PHP $_SESSION数组中,因此我可以确定导航是否必须使用不同的父ID添加.
示例: image我们有对象Page->Extension->Field,这些对象都在模块中PageManagement,从左到右为父对象.现在假设我们有一个ID为2的页面,一个ID为8的扩展,一个ID为17的字段.编辑Field的URL将是example.com/PageManagement/Field/Modify/8/17,因为我们正在编辑Field 17,它有Extension 8作为父级.编辑扩展名的URL将是example.com/PageManagement/Extension/Modify/2/8,因为我们正在编辑Extension 8,它具有父级.编辑页面只是example.com/PageManagement/Page/Modify/2因为它没有父级.
问题:
现在,所有这一切都很完美.但是,如果打开了多个选项卡,则它们共享相同的$_SESSION选项,因此在一个选项卡中导航可以抛弃另一个选项卡的父历史记录.在几乎所有情况下它仍然是正确的,但我可以导致它的事实是坏的(因为有人可以添加/删除/编辑数据而不知道它们实际上在错误的父列表中).
我需要的是:我需要一种方法,通过每个请求,确定它来自哪个选项卡,最有可能是通过为每个选项卡生成某种形式的UID并将其与每个请求一起发送.然后,我的系统可以存储每个选项卡的导航历史记录,而不是每个会话.
考虑的解决方案
Window.sessionStorage(每个新窗口/选项卡都会重置)中.这将允许我生成一个如果还没有设置(所以一个新选项卡),因此每页会话存储(和记住)不同的一个.
moduleName.
如果有人能够解决上述解决方案中提到的问题,或者想出一个全新的解决方案,那将是惊人的.显然,我更希望尽可能少地改变URL系统的工作方式,但如果这是唯一的解决方案,那就这样吧......
您的请求设计中存在一个基本缺陷,导致您遇到所有麻烦。
系统应尽可能在单个请求中包含所有相关信息。在您的情况下,这意味着放弃“记住”早期请求(状态..)的机制,而是$_SESSION传递请求中的所有信息。它可以位于 URL(“地址”和/或查询字符串)、标头(如果合适)(通常使用 cookie。在这种情况下可能不合适)或正文(与 POST 表单传递有效负载的方式相同)。
选择这条道路的原因有很多,仅举几例:
一如既往,没有任何规则是无例外的。在这种情况下,不适合包含在每个请求中的最常见信息是身份验证信息(用户名、密码等......)
总而言之,您应该强烈考虑重建您的请求,以便提供所有必需的信息。
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |