Apo*_*olo 5 variables session http
在所有Web应用程序中,您可以获取/设置会话变量
PHP:
Run Code Online (Sandbox Code Playgroud)$foo = $_SESSION['myVar'];
.NET(MVC,在Controller中):
Run Code Online (Sandbox Code Playgroud)using System.Web.Mvc; // ... var foo = Session["myVar"];
我正在寻找关于会话变量的一些详细信息:
硬盘,RAM,......
客户端服务器
Web服务器(Apache,IIS,...)/ Web App
会议,对.因此,当会话开始时,它何时结束以及系统如何知道何时可以摆脱这些变量(GC机制)?
PS:我想让这里的人们建立一个关于这个概念的好文档.如果您认为应该添加或编辑某些问题,请随时编辑问题.
目的
创建会话变量主要是为了处理 HTTP 协议的无状态行为。由于每个页面请求几乎完全独立于其他页面请求进行处理,因此开发人员希望找到将请求字符串绑定在一起的方法。典型的示例是登录页面,它对用户进行身份验证,然后更改登录后请求的页面的行为。
为了帮助解决这个问题,许多语言和/或框架提供了会话变量的概念,它允许开发人员存储与特定浏览器关联的数据,并在来自同一浏览器的单独请求中持续存在。
因此,以登录为例,在新浏览器发出的第一个请求中,会话变量将为空。然后,用户将填写身份验证信息并假设它是正确的,在服务器端,代码将为该浏览器设置会话变量,以包含某种标识符来表示他的浏览器已通过身份验证。然后,在后续请求期间,代码可以检查会话变量中的标识符以执行一些需要登录的特定代码。
另一个常见的用例是“向导”工作流程。您可能有一个多页表单,您希望用户通过多个单独的请求填写该表单。当用户填写表单时,您可以将值添加到会话中,直到用户到达表单末尾,此时您可以将其保存在更永久的存储中。
存储与管理
有很多方法可以存储会话变量。任何类型的跨请求持久存储都可以工作。最基本的方法可能是为每个会话创建一个单独的文件。PHP 通过获取在浏览器中作为 cookie 存储的会话 ID,然后查找具有从会话 ID 派生的名称的文件来实现此目的。
您还可以将会话变量存储在数据库、共享内存中,甚至存储在 cookie 本身中。Ruby on Rails 通过加密数据然后将 cookie 设置为加密数据来存储会话变量。因此会话存储在用户的浏览器本身中。
最典型的是,会话变量与以某种方式存储在 Web 浏览器中的 cookie 相关联。此 cookie 通常由编写 Web 服务器应用程序的语言或框架自动管理。语言或框架检测新会话并创建新的会话变量,该变量通过某种 API 提供给 Web 服务器应用程序。然后,Web 服务器应用程序可以使用 API 在会话变量中存储信息、删除它、创建新变量等。通常框架对于会话的生命周期有一些默认值,但通常可以通过以下方式进行调整: API。我认为最典型的默认生命周期是通过 cookie 的浏览器进程的生命周期,该 cookie 的生命周期与用户的浏览器进程相关。
安全
会话变量存在很多安全问题,因为它们通常用于管理 Web 应用程序中的授权和身份验证。
例如,许多应用程序仅使用与 cookie 关联的生命周期来设置会话生命周期。许多登录系统希望强制用户在指定时间后重新登录,但您不能相信浏览器会在您告诉它时使 cookie 过期。浏览器可能有缺陷,可能是由恶意人员编写的,或者是由用户自己操纵来调整 cookie 的生命周期的。因此,如果您使用的会话变量 API 依赖于 cookie 生存期,您可能需要有一个辅助机制来强制会话变量过期,即使 cookie 没有过期。
其他一些安全问题涉及存储。如果您将会话 ID 存储在 cookie 中,然后使用该会话 ID 作为文件名来存储会话变量,则恶意浏览器可以将 cookie 中的会话 ID 更改为另一个 ID,然后来自该浏览器的请求将开始使用某些会话 ID。其他浏览器的会话文件。
另一个问题是会话信息被盗。通过 XSS 或数据包检查,会话信息可以从用户浏览器会话中窃取,然后被恶意用户用来访问其他用户的帐户。通常可以通过使用 SSL 保护传输中的会话来缓解此类问题。
本页解释了使用 PHP 的会话变量实现时的许多安全问题。Ruby on Rails 有一个类似的页面,概述了该平台的会话变量的安全问题。
归档时间: |
|
查看次数: |
195 次 |
最近记录: |