gpt4 book ai didi

http - session 变量 - 文档请求

转载 作者:可可西里 更新时间:2023-11-01 15:20:31 24 4
gpt4 key购买 nike

session 变量

在所有网络应用程序中,您都可以获取/设置 session 的变量

PHP:

$foo = $_SESSION['myVar'];

.NET (MVC, in Controller):

using System.Web.Mvc;
// ...
var foo = Session["myVar"];


我正在寻找有关 session 变量的一些详细信息:
  • 他们最初的目的(他们打算解决什么问题?)
  • 常见用例


  • 贮存
  • 存放在哪里在系统上?

  • 硬盘、内存、...
  • 谁在存储它 ?

  • 客户端服务器
  • 我猜是服务器端,所以 什么管理它 ?

  • Web 服务器(Apache、IIS...)/Web 应用程序
  • session 变量的生命周期是多少?

  • session ,对。那么 session 何时开始,何时结束以及系统如何知道何时可以摆脱这些变量(GC 机制)?

    安全
  • 已知的安全漏洞?


  • PS:我想让这里的人们就这个概念建立一个很好的文档。如果您认为应该添加或编辑某些问题,请随时编辑问题。

    最佳答案

    用途

    创建 session 变量主要是为了处理 HTTP 协议(protocol)的无状态行为。因为每个页面请求都与其他页面请求完全分开处理,所以开发人员想要将请求字符串联系在一起的方法。一个典型的例子是一个登录页面,它对用户进行身份验证,然后在登录后更改请求的页面的行为。

    为了帮助解决这个问题,许多语言和/或框架提供了 session 变量的概念,它可以让开发人员存储与特定浏览器相关联的数据,并在来自同一浏览器的不同请求中持续存在。

    因此,以登录为例,在来自新浏览器的第一个请求中, session 变量将为空。然后用户将填写身份验证信息并假设它是正确的,在服务器端,代码将为该浏览器设置 session 变量以包含某种标识符,以表明他的浏览器已通过身份验证。然后在后续请求期间,代码可以检查 session 变量中的标识符以执行一些需要登录的特定代码。

    另一个常见用例是“向导”工作流。您可能有一个多页表单,您希望用户填写多个单独的请求。当用户填写表单时,您可以将值添加到 session 中,直到用户到达表单的末尾,此时您可以将其保存在更永久的存储中。

    存储和管理

    有很多方法可以存储 session 变量。任何类型的跨请求持久的持久存储都可以工作。可能最基本的方法是为每个 session 创建一个单独的文件。 PHP 通过获取它作为 cookie 存储在浏览器中的 session ID 来执行此操作,然后查找具有从 session ID 派生的名称的文件。

    您还可以将 session 变量存储在数据库、共享内存中,甚至 cookie 本身中。 Ruby on Rails 通过加密数据然后将 cookie 设置为加密数据来存储 session 变量。所以 session 被存储在用户的浏览器本身中。

    最典型的是, session 变量与以某种方式存储在网络浏览器中的 cookie 相关联。此 cookie 通常由编写 Web 服务器应用程序的语言或框架自动管理。语言或框架检测新 session 并创建新的 session 变量,它通过某种 API 提供给 Web 服务器应用程序。然后 Web 服务器应用程序可以使用 API 将信息存储在 session 变量中,删除它,创建一个新的,等等......通常框架有一些 session 生命周期的默认值,但通常这可以通过API。我认为最典型的默认生命周期是浏览器进程通过 cookie 的生命周期,该 cookie 的生命周期与用户的浏览器进程相关联。

    安全

    session 变量存在很多安全问题,因为它们通常用于管理 Web 应用程序中的授权和身份验证。

    例如,许多应用程序仅使用与 cookie 关联的生命周期来设置 session 生命周期。许多登录系统希望强制用户在指定时间后重新登录,但您不能相信浏览器会在您告诉它时使 cookie 过期。浏览器可能有问题,可能由恶意人员编写,或由用户自己操纵以调整 cookie 的生命周期。因此,如果您使用的 session 变量 API 依赖于 cookie 生存期,您可能需要有一个辅助机制来强制 session 变量过期,即使 cookie 没有过期。

    其他一些安全问题涉及存储。如果您将 session ID 存储在 cookie 中,然后使用该 session ID 作为您的文件名来存储 session 变量,恶意浏览器可以将 cookie 中的 session ID 更改为另一个 ID,然后来自该浏览器的请求将开始使用一些其他浏览器的 session 文件。

    另一个问题是 session 信息被盗。通过 XSS 或数据包检查, session 信息可以从用户浏览器 session 中窃取,然后被恶意用户用来访问其他用户的帐户。这类问题通常可以通过使用 SSL 来保护传输中的 session 来缓解。

    This page解释了使用 PHP 的 session 变量实现时的许多安全问题。 Ruby on Rails 有 a similar page概述了该平台的 session 变量的安全问题。

    关于http - session 变量 - 文档请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300856/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com