参照:

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. Kali 关闭自动锁屏功能

    Kali 关闭自动锁屏功能 1.点击 [开始] -> [设置] -> [电源管理器] 2.选择 [安全性],将 [自动锁定会话] 选为 [从不],将 [当系统休眠时锁定屏幕] 取消勾选,点 ...

  2. Project Euler 457 题解

    初等数论小题目 求 \[n^2-3n-1\equiv 0\pmod {p^2} \] 配方,得到: \[(2n-3)^2\equiv 13 \pmod {p^2} \] 根据亨泽尔引理,只需得到 \( ...

  3. FLink自定义Source,不停生产数据

    一.代码模板 VideoOrder.java package net.xdclass.model; import java.util.Date; import lombok.AllArgsConstr ...

  4. JUC并发—2.Thread源码分析及案例应用

    大纲 1.什么是线程以及并发编程 2.微服务注册中心案例 3.以工作线程模式开启微服务的注册和心跳线程 4.微服务注册中心的服务注册功能 5.微服务注册中心的心跳续约功能 6.微服务的存活状态监控线程 ...

  5. IGM机器人维修的关键环节

    在现代科技领域,机器人已经成为不可或缺的一部分,它们广泛应用于各个行业,包括制造业.服务业.医疗.科研等.对于任何机器人来说,定期的维护和修理都是必不可少的.这不仅可以确保机器人正常工作,还可以延长其 ...

  6. 功率MOS管的参数说明

    图解功率MOS管的每一个参数!   最大额定参数 最大额定参数,所有数值取得条件(Ta=25℃) VDSS 最大漏-源电压 在栅源短接,漏-源额定电压(VDSS)是指漏-源未发生雪崩击穿前所能施加的最 ...

  7. 收集 Spring Boot 相关的学习资料

    收集 Spring Boot 相关的学习资料,Spring Cloud点这里 重点推荐:Spring Boot 中文索引 推荐博客 纯洁的微笑-Spring Boot系列文章 林祥纤-从零开始学Spr ...

  8. C++最基本调用动态链接库dll方法的小结

    针对当时初学动态链接.静态链接,有些文档整理一下发出来算是给自己和读者一个小结. 首先创建DLL 编辑头文件 dllmain.h 头文件: #pragma once #if defined(_DLL_ ...

  9. 【MATLAB习题】双摇杆机构的运动学分析

    1.双摇杆机构概述 双摇杆机构的判别方法: 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,连杆(机架的对杆)为最短杆时. 如果最长杆长度+最短杆长度 >其他两杆长度之和,此时不论以何杆为机架,均 ...

  10. Cannot find config.m4. phpize 安装扩展出错

    原因 编译扩展包下面的名字可能不是 config.m4,也有可能有类似 config0.m4 的文件:因此名字不一样也是找不到的,我们需要用 mv config0.m4 config.m4 :修改文件 ...