我有一个(希望)有关会话的快速问题。虽然我已广泛使用会话,但我没有在某些情况下使用它们,其中值会根据用户的操作而改变。
登录我的应用程序后,用户可以选择公司区域,该区域具有多个级别的页面和文件夹。所有这些页面都需要这个'company_id'。目前我通过GET发送company_id,但随着我深入了解应用程序,这变得越来越难以维护,其他各种数据都存储在URL中。
因此,当用户选择他们的公司时,我可以在$ _SESSION数组中设置他们的company_id。但是,当用户更改公司时,我需要将$ _SESSION ['company_id']更改为新值。
这是会话的好用吗?我可以通过使用会话数据而不是总是使用GET来清理我的URL,但我不确定这是否是推荐的使用会话的方式。
提前致谢
答案 0 :(得分:2)
这是HTTP设计理念的糟糕实现。所有HTTP请求都应该是自包含, RESTful 。获取特定页面所需的所有信息都应该出现在请求本身(URL,标题和正文)中,不依赖于隐藏状态。
超级简单示例:您无法将URL复制到某个地方或其他人,并让他们看到同一页面。页面的内容取决于会话状态,该会话状态是通过几个先前页面的访问历史而费力地设置的。要返回到同一页面,您需要回溯相同的步骤,重新创建一些隐藏的服务器端状态以到达同一页面。
如果考虑到访问者可能想要在两个或多个同时标签/窗口中打开需要不同状态的页面,这会变得更加复杂和混乱。
所有这一切并不是说它无法工作,只是因为它非常复杂并且会打破浏览器通常预期的行为,除非你真的向后弯腰以某种方式阻止它。
答案 1 :(得分:1)
如果多个级别的页面和级别是每个公司,您可以将 company_id 放在特定的包含文件中 - 该部分网站专用于给予公司。
然而,如果他们被多家公司共享,这可能是您想要的,这可能会产生误导,甚至是危险的,具体取决于用户操作,因为用户可能会跳转到给定页面(链接...)并访问包含链接到公司的意外数据的页面,该公司的ID由会话或cookie提供。
您可以根据ID动态构建网页上的链接,以确保从 页面导航时的一致性。任何直接“跳转”到网站的另一部分都不会带有ID(并且页面可能会提供选择公司)。
根据您的网络服务器以及您是否可以控制它,您可以构建具有“公司ID”作为URL路径元素的URL,而不是GET参数
例如
http://example.com/invoicing/company382/listprices.php
使用重写(Web服务器配置)将实际使用的URL更改为
http://example.com/invoicing/listprices.php?compid=company382
(对用户不可见的URL)通过GET参数通知公司ID。