参照:

session+cookie简单讲解以及持久化登录实现_session实现用户登录_AkagiSenpai的博客-CSDN博客

sessionID和cookie - 哈哈呵h - 博客园 (cnblogs.com)

概念介绍

cookie——是http无状态特性的补充,是在客户端保持状态的方案,以 key/value的形式进行保存。网站经常使用这个技术来识别用户是否登陆,记录用户购物车选购了几样商品等功能。几个注意点

  • 每次请求的时候,请求头会自动包含本网站此目录下的 cookie 数据,,不需要手动操作。
  • 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了,这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般保存在内存里
  • 如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。将最大时效设为0则是命令浏览器删除该cookie。
  • cookie可以在前端js修改(篡改一般也是在前端),也可以在服务器上设置和获取

session介绍

Session(会话):Session是服务器端维护的关于用户的状态信息。当用户与服务器建立连接时,服务器为每个用户创建一个唯一的会话,并分配一个唯一的Session ID。Session数据存储在服务器的内存或持久性存储中。通过Session,服务器可以跟踪和管理用户的状态,存储用户的身份验证信息、购物车内容等。

SessionId:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象。Session ID是一个唯一的标识符,用于识别用户的会话。它通常以Cookie形式存储在用户的浏览器中,也可以通过URL重写等方式传递给客户端。客户端在每个请求中发送Session ID给服务器,以便服务器可以检索相关的会话数据并识别用户

session的几个点

  • session保存在服务器端
  • session与客户端是一一对应的,session设置后服务器会自动生成一个sessionid,Session ID是用于唯一标识和识别用户会话的标识符,通常以Cookie形式存储在客户端
  • 通过Session ID,服务器可以获取对应的会话数据,从而管理和跟踪用户的状态。(客户端在每个请求中发送Session ID给服务器,以便服务器可以检索相关的会话数据并识别用户,比如服务器可能同时需要记录多个用户的登录状态,A用户请求时,要确保拿到的是A用户的登录状态。请求携带的标识牌就是sessionId)
  • 会话的过期时间不仅取决于服务器端设置,还受到客户端浏览器对Cookie的处理影响。如果用户清除了浏览器的Cookie,会话将失效并需要重新创建

session、cookie、sessionId的关系

sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。服务端在创建了Session的同时,会为该Session生成唯一的sessionId,而sessionId会在随后的请求中会被用来重新获得已经创建的Session;Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有sessionId;当客户端再次发送请求的时候,会将这个sessionId带上,服务器接受到请求之后就会依据sessionId找到相应的Session,从而再次使用之。

在Js里操作Cookie

要使用"jquery.cookie"插件,请按照以下步骤操作:

  1. 首先,确保已经引入jQuery库文件,可以通过以下方式在HTML中添加:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  1. 然后,下载并引入"jquery.cookie"插件。您可以在 https://github.com/carhartl/jquery-cookie 下载插件文件,并将其放置在项目中,然后通过以下方式在HTML中引入:
<script src="path/to/jquery.cookie.js"></script>
  1. 现在,您可以使用以下示例代码来设置、获取和删除cookie:

设置cookie:

$.cookie('cookieName', 'cookieValue', { expires: 7, path: '/', domain: 'example.com' });

Cookie 的路径指告诉浏览器访问那些地址时该携带该 Cookie,我们知道浏览器会保存很多不同网站的 Cookie,比如百度的 Cookie,新浪的 Cookie,腾讯的 Cookie 等等。那我们不可能访问百度的时候携带新浪的 Cookie,也不可能访问每个网站时都带上所有的 Cookie 这是不现实的,所以往往我们还需要为 Cookie 设置一个 Path 属性,来告诉浏览器何时携带该Cookie

如:设置为 /项目名/路径 cookie.setPath(“/项目名/路径”),这样设置只有访问“/项目名/路径”下的的资源才会携带 Cookie

如:/项目名/路径/1.jsp 、/项目名/路径/hello/2.jsp 等,如果不设置,默认会在访问“/项目名”下的所有资源时携带

domain—设置生效域名,表示在此域名及子域名下,cookie可被共享访问,可作为多个子域名之间的登录状态共享

Session(会话):Session是服务器端维护的关于用户的状态信息。当用户与服务器建立连接时,服务器为每个用户创建一个唯一的会话,并分配一个唯一的Session ID。Session数据存储在服务器的内存或持久性存储中。通过Session,服务器可以跟踪和管理用户的状态,存储用户的身份验证信息、购物车内容等

获取cookie:

<script src="path/to/jquery.cookie.js"></script>

删除cookie:

$.removeCookie('cookieName');

请确保在使用上述代码之前,正确引入了jQuery库和"jquery.cookie"插件文件。

在Asp.NET里Cookie

ASP.NET 框架会自动为每个用户会话生成唯一的 Session ID,并将其存储在名为 "ASP.NET_SessionId" 的 Cookie 中。这个 Cookie 会在每个请求中发送到服务器,以便服务器可以识别用户的会话。

在使用 ASP.NET Session 时,不需要手动指定 Session ID。框架会处理会话的创建和管理,并自动关联请求中的 Session ID 和服务器上的会话数据。只需要使用 Session 对象来访问会话数据即可。

存储的形式

在 ASP.NET 中,会话(Session)数据可以以不同的形式进行存储。ASP.NET 提供了多种选项来存储会话数据,包括以下几种形式:

  1. In-Memory 存储:默认情况下,ASP.NET 会将会话数据存储在服务器内存中。这种方式适用于单个服务器和轻量级应用程序,但在负载较重的情况下,可能会对服务器的内存消耗产生影响。

    优点:速度快,适用于轻量级应用程序和单个服务器环境。不需要额外的配置和外部依赖。

    缺点:会话数据存储在服务器内存中,可能会对服务器的内存消耗产生影响。不支持多服务器环境下的共享会话。Session数据容易丢失

  2. State Server 存储:ASP.NET 提供了一个称为 "ASP.NET State Service" 的独立服务,可用于将会话数据存储在一个单独的进程中。这种方式可以在多个服务器之间共享会话数据,适用于具有负载均衡的 Web 应用程序,Session数据能保存。

    优点:会话数据存储在一个独立的进程中,可以在多个服务器之间共享会话数据。适用于负载均衡和扩展性要求高的应用程序。

    缺点:相对于 In-Memory 存储,访问 State Server 存储会有一定的性能开销。需要配置和管理独立的 State Server 服务。

  3. SQL Server 存储:ASP.NET 还支持将会话数据存储在 SQL Server 数据库中。通过配置连接字符串和相关设置,可以将会话数据持久化到数据库,从而实现可扩展和持久化的会话管理。

  4. Custom 存储:如果需要更高度的自定义和控制,您可以实现自己的会话存储提供程序。通过实现抽象类 System.Web.SessionState.SessionStateStoreProviderBase,您可以定义自己的会话存储机制,例如使用缓存、分布式存储等。

    优点:会话数据存储在 SQL Server 数据库中,具有持久性和可伸缩性。适用于需要长期存储会话数据、可在多个服务器之间共享数据的场景。

    缺点:相对于 In-Memory 存储和 State Server 存储,访问 SQL Server 存储会有更高的延迟和性能开销。需要配置和管理数据库连接。

要选择适当的会话存储形式,可以根据应用程序的需求、可伸缩性要求和预算等因素进行评估和选择。默认情况下,ASP.NET 使用 In-Memory 存储,但可以通过配置文件进行更改。

可以通过在 web.config 文件中的 <sessionState> 元素中进行设置来配置会话存储方式。例如:

<sessionState mode="SQLServer" sqlConnectionString="your_connection_string" />

State Server 存储方式实现(解决内存方式失效问题)

State Server 存储的步骤:

1、配置 State Server:

  • 打开应用程序的 Web.config 文件。

  • <system.web> 元素下添加以下内容:

    <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="240" />

    其中,ip_address 是 State Server 服务的 IP 地址,port 是 State Server 服务的端口号。如果 State Server 服务与应用程序在同一台服务器上,则可以使用 "localhost" 和默认端口 "42424"。cookieless="false":指定会话状态是否使用 Cookie 来存储会话标识符。timeout="240":指定会话的超时时间,单位为分钟。在此示例中,设置为 240,表示会话在 240 分钟(4 小时)没有活动时将过期

  • 保存并关闭 Web.config 文件。

2、启动 State Server 服务——aspnet_state服务:

  • 在运行 State Server 的服务器上,打开命令提示符(或 PowerShell)。

  • 输入以下命令来启动 State Server 服务:

    aspnet_state -port port_number -lcid lcid_number

    其中,port_number 是用于通信的端口号,与 Web.config 中配置的端口号一致。lcid_number 是 State Server 服务的区域设置标识符(默认为 0)。

3、配置应用程序:在需要使用会话的页面或代码中,可以通过 Session 对象来访问会话数据,无需进行其他特殊设置。当使用 State Server 存储会话数据时,会话中的对象需要进行序列化和反序列化,以便在不同服务器之间传输和存储。在 ASP.NET 中,要确保会话中的对象可以正确地进行序列化和反序列化,需要满足以下条件:

  • 类型必须可序列化:会话中的对象必须标记为可序列化。要将一个类标记为可序列化,可以使用 [Serializable] 特性进行声明。例如:

    [Serializable]
    public class MyClass
    {
    // 类的成员和逻辑
    }
  • 会话数据的对象必须是可访问的,要声明成Public

  • 对象中的字段和属性必须可序列化,对于不想序列化的字段,可以使用 [NonSerialized] 特性来标记不需要序列化的字段

    [Serializable]
    public class MyClass
    {
    [NonSerialized]
    public int field1; // 不需要序列化的字段 // 其他需要序列化的字段
    }

需要注意以下几点:

  • State Server 服务可以在多个应用程序之间共享,只要它们使用相同的 State Server 配置。
  • State Server 存储仅存储会话数据,不包含任何敏感或保密信息。如需存储敏感信息,请使用加密或其他安全措施。
  • State Server 存储不适用于跨网络较高延迟的环境,因为会话数据的读写需要通过网络通信。

通过配置和使用 State Server 存储,可以实现在多个服务器之间共享会话数据,确保应用程序的可伸缩性和可靠性。

asp.net里cookie、session进一步理解的更多相关文章

  1. ASP.NET里的Session详细解释

    Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...

  2. cookie&&session再理解笔记

    就拿php来说,两个php页面之间不拿get,post传递变量的话,数据是不能共享的.访问完1.php页面该页面的变量就被销毁了.所以就拿学校食堂来说,拿现金买饭的话你交完钱后,他给你个票以便确认你, ...

  3. asp.net 10 Cookie & Session

    Cookie 1.什么是Cookie 一小段文本,明文的数据,关于网站相关的文本字符串数据.一个客户端状态保持机制~ 存储在客户端的浏览器内存里面或者磁盘(如果不指定过期时间,那么存储在客户端浏览器内 ...

  4. Asp.Net里关于Session过期跳转页面的一些小技巧

    这里算是自己的个人随笔吧,仅供参考使用,后续有更好的方法再做补充 之前在Aspx页面里面,在Session过期的时候我经常会使用 Server.Transfer("b.aspx") ...

  5. 对session和cookie的一些理解

    由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正.);                  response.addCookie(c1);   * ...

  6. thinkphp里的session、cookie方法

    thinkphp里,对于session和cookie的操作,不管是存值.获取.删除,均只有一个方法.现分享出来,供大家参考参考. /** * session管理函数 * @param string|a ...

  7. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

  8. ecshop里操作session与cookie

    目录 操作session 操作cookie html模板里提交保存用用户名 php里 js里保存cookie js里读取cookie html模板里smart的保留变量 html模板里取session ...

  9. 对Cookie和Session的理解

    本篇文章系自己总结经验,如果有朋友感觉哪里有问题,欢迎留言评论,谢谢~! Cookie和Session的产生背景: 在动态页面里面,每个变量都是有有效期的,所有的变量的最大生命周期就是一个脚本的周期( ...

  10. 什么是cookie,作用是什么? 以及session的理解

    cookie: 1.定义:什么是cookie?  cookie就是存储在客户端的一小段文本 2.cookie是一门客户端的技术,因为cookie是存储在客户端浏览器中的 3.cookie的作用:是为了 ...

随机推荐

  1. 本地部署DeepSeek-R1并使用自定义的知识库AnythingLLM

    一.基础信息 1.概述 以下是私有化部署方案的优势: 性能卓越:提供媲美商业模型的对话交互体验 环境隔离:完全离线运行,杜绝数据外泄风险 数据可控:完全掌控数据资产,符合合规要求 2.硬件环境 CPU ...

  2. mac安装NTFS工具

    1.插上硬盘,输入diskutil list 查看磁盘列表找到磁盘名称 2.更改 /etc/fstab文件 LABEL=MyData none ntfs rw,auto,nobrowse ntfs r ...

  3. Word中接入大模型教程

    前言 为什么要在word中接入大模型呢? 个人觉得最大的意义就是不用来回切换与复制粘贴了吧. 今天分享一下昨天实践的在word中接入大模型的教程. 在word中接入大模型最简单的方式就是使用vba. ...

  4. MacOS环境配置Homebrew

    Homebrew笔记 1. 介绍 官网:https://brew.sh/ 对于习惯了使用命令来完成一切的程序员来说,安装软件这种小事,自然是能够用命令解决,就不用图形界面选择.但是在 Linux 中, ...

  5. Vulnhub-kioptix2014靶机getshell及提权

    靶机搭建 点击扫描虚拟机 然后扫描文件夹即可 信息收集 扫描ip nmap扫描得到目标靶机ip nmap -sn 192.168.108.0/24 故 攻击机:192.168.108.130 目标靶机 ...

  6. 库卡机器人KR500维修保养

    随着现代工业自动化,KUKA库卡机器人以其卓越的性能.灵活的操作和高效的产出而备受赞誉.然而,为了确保机器人的持续稳定运行和延长使用寿命,应联系子锐机器人维修对库卡机器人保养至关重要. 一.库卡机器人 ...

  7. 8-2 MySQL 索引的设计原则(超详细说明讲解)

    8-2 MySQL 索引的设计原则(超详细说明讲解) @ 目录 8-2 MySQL 索引的设计原则(超详细说明讲解) 1. 测试数据准备 2. 哪些情况适合创建索引 2.1 字段的数值有唯一性的限制 ...

  8. Bean的原始版本与最终版本不一致?记一次Spring IOC探索之旅

    前言 在这个信息技术发展迅速的时代,万万没想到,Spring自2003年发展至今,仍是技术选型中的首选,某些项目甚至有Spring全家桶的情况. 在Java开发者面试当中,Spring的原理也常被面试 ...

  9. php执行时间

    要计算代码的bai执行时间,在PHP来讲是du十分简单的,首先,zhi你需要知道,PHP是一种dao顺序执行的脚本语言,所以,可以按照以下步骤来计算代码的执行时间: <?php function ...

  10. k8s 手动更新 seldon core ca证书

    前言 seldon core 报错:x509: certificate has expired or is not yet valid: current time 这是因为 seldon core 默 ...