本文将分享jsoup能处理session吗?的详细内容,并且还将对js操作session进行详尽解释,此外,我们还将为大家带来关于ASP.Net会话超时检测:Session.IsNewSession和
本文将分享jsoup 能处理 session 吗?的详细内容,并且还将对js操作session进行详尽解释,此外,我们还将为大家带来关于ASP.Net会话超时检测:Session.IsNewSession和SessionCookie检测是最好的方法吗?、ASP.Net:如果我有Session ID,可以获取Session对象吗?、Cloud Foundry Session Affinity(Sticky Session)的实现、cookie、session、sessionid 与jsessionid的相关知识,希望对你有所帮助。
本文目录一览:- jsoup 能处理 session 吗?(js操作session)
- ASP.Net会话超时检测:Session.IsNewSession和SessionCookie检测是最好的方法吗?
- ASP.Net:如果我有Session ID,可以获取Session对象吗?
- Cloud Foundry Session Affinity(Sticky Session)的实现
- cookie、session、sessionid 与jsessionid
jsoup 能处理 session 吗?(js操作session)
如果需要有个测试在线系统使用正常,需要用 jsoup 去访问系统,然后分析结果
但是系统有 session 的写入和读取,jsoup 能处理这一块吗?
ASP.Net会话超时检测:Session.IsNewSession和SessionCookie检测是最好的方法吗?
在页面加载之前,我需要确定这是否是超时情况,如果是 – 重定向到timeout.aspx.
下面的文章指定如果IsNewSession为true,并且存在sessionID cookie – 那么您有超时情况.
然而,在我的测试中,我遇到了我超时并尝试重新登录并且IsNewSession等于true并且sessionId cookie仍然闲置(因为它保留整个浏览器会话)的情况,因此它说我已经定时当我只是想重新登录时再次出现.
有没有更好的方法来做这一切?
技术描述为here和here.
在我的’global.asax’文件中,我有:
void Application_PreRequestHandlerExecute(object sender,EventArgs e) { // Check if session state is enabled in web.config if (Context.Session == null) return; if (Session["user"] == null) { if (Session.IsNewSession) { HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"]; if ((null != sessionCookie) && !string.IsNullOrEmpty(sessionCookie.Value)) { /* Session Timeout! */ FormsAuthentication.SignOut(); //just in case not done yet Session.Abandon(); Response.Redirect("timeout.aspx"); } else { // Cookie didn't exist - must be a brand new login return; } } else { // If there is no session data and the session is not new then it must be the postback of the login screen. if ((HttpContext.Current.Request.Path.ToLower().LastIndexOf("/login.aspx") >= 0) && (Request.HttpMethod == "POST")) { return; } } } }
解决方法
您的问题是,由于会话数据已经消失,您只需要进行新请求即可创建新会话,并且进入的请求会携带会话ID cookie(表示之前已登录).
有两种方法.
曲奇饼:
首先,在您的登录页面中,您可以创建一个指示用户登录状态的附加cookie.当用户手动注销时,cookie值被修改以指示注销.会话超时后的请求除了具有IsNewSession true之外还将具有登录状态cookie,其显示用户仍然登录,从而指示用户未手动选择退出.
数据库:
第二种方法是将sessionID存储在DB表中以及登录状态.登录成功后,将sessionID输入LoggedOnSessions表.当用户手动注销时,从表中删除sessionID.因此,您的超时检测可以包括查找表中的会话ID(如果存在超时)(此时您应该也可以删除ID).
出于清洁目的,您应该包括一个到期日期时间字段,其设置的时间比任何实际登录时间(例如一周)长得多.定期(例如,每周)删除表中已过期的条目.
我的偏好是数据库方法我讨厌设置cookie,因为它让我觉得每次请求都会发送cookie但很少需要.
ASP.Net:如果我有Session ID,可以获取Session对象吗?
我正在使用一个Web处理程序(ashx),它接受aspx页面的表单发布.当处理程序收到此表单时,为了做所需要做的事情,它需要知道登录用户(User.Identity.Name),但是我不能依赖浏览器发送的cookie.
我知道我可以得到Session.SessionID并将其放置在一个隐藏的表单字段中,但一旦我的处理程序收到表单发送,我该怎么使用该SessionID找出登录用户的身份?
我正在使用StateServer模式进行会话状态.
解决方法
Cloud Foundry Session Affinity(Sticky Session)的实现
会话保持(Session Affinity),有时又称粘滞会话(Sticky Sessions), 是负载均衡领域设计需要着力解决的重要问题之一,也是一个相对比较复杂的问题。
会话保持是指在负载均衡器上的一种机制,在完成负载均衡任务的同时,还负责一系列相关连的访问请求会分配到一台服务器上。
当用户向服务器发起请求,服务器创建一个session,并把session id以cookie的形式写回给客户。
看一个例子:当我访问SAP UI5应用时,
在http请求的头部观察到客户端要求服务器返回以cookie的形式返回session id的请求字段:
在服务器响应的头部字段果然返回了session id:
这些cookie信息能够在Chrome开发者工具的Application标签页里的Cookies区域查看:
如此一来,只要客户的浏览器不关,再去访问服务器时,访问请求会自动附上session id去,服务器端检测到这个session id后,就会使用内存中维持的与这个id对应的session为客户端服务。
再回到我们讨论的会话保持这个话题。什么时候需要会话保持?举个大家每天都会遇到的例子,大家在淘宝或者京东上购物时,从完成用户身份认证到浏览店铺,选择心仪商品加入购物车,一直到最后下单完成支付,需要经过很多次和服务器的交互过程才能完成整个交易。由于这几次交互过程从顺序上和逻辑上是密切相关的,服务器在进行这些交互过程的某一个交互步骤时需要一个上下文(Context),即上一次交互过程的输出,因此要求这些相关的交互过程都由一台服务器完成。
在这种情况下,假设负载均衡器仍然把这些相关交互session分散到不同的服务器实例上,就会带来很糟糕的用户体验,比如客户在浏览器上每点击一次,都会弹出登录页面。或者即使用户输入了正确的验证码,却仍然提示验证码错误。由于服务器处理实例不一样,也有可能造成客户放入购物车的物品丢失。
这就是会话保持机制引入的原因:确保把来自同一客户的一个完整会话的请求转发至后台同一台服务器进行处理。
那么Cloud Foundry的Session Affinity是怎么实现的呢?
官方文档有介绍:
https://docs.cloudfoundry.org/concepts/http-routing.html#sessions
(1) To support sticky sessions, configure your app to return a JSESSIONID cookie in responses. The app generates a JSESSIONID as a long hash in the following format:
您的应用在响应结果里需要加上一个JSESSIONID字段,长度如下:
1A530637289A03B07199A44E8D531427
(2) If an app returns a JSESSIONID cookie to a client request, the CF routing tier generates a unique VCAP_ID for the app instance based on its GUID in the following format:
CF routing tier基于app生成的JSESSIONID生成一个VCAP_ID: 323f211e-fea3-4161-9bd1-615392327913
(3) 接下来客户每次发起请求,必须同时提供JSESSIONID和VCAP_ID。JSESSION_ID交给应用,用于实现session粘连。而VCAP_ID用于标识服务的应用实例,如果应用挂了,gorouter会把请求路由到另一个应用实例上。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
cookie、session、sessionid 与jsessionid
cookie、session、sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解。
我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案:
凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当前的存款以及存取的次数,每次存取的金额是多少。-----------这种方式表示协议本身支持状态。
使用存折的方式,然后柜台职员就把每个顾客的存款/取款的信息保存在这张折子,然后交给顾客保管,当顾客来存款/取款时,只要拿出存折,职员查看存折就对当前这位顾客的存款/取款信息一目了然。当然,你马上会想到,顾客修改这个信息怎么办?我们也有措施对每次存款/取款记录后面盖章。无盖章的就是假冒信息。但如果顾客是真的要伪造,当然印章也是可以伪造的。-------------这种方式就是在客户端端保持状态。
使用银行卡的方式,发给每位银行用户一张银行卡,银行卡上有一个唯一的卡号,没有其它任何信息,当顾客来存款/取款时,拿出银行卡,银行把卡号输入的电脑,很快就显示当前用户的存/取款记录。这种方式的安全性就会有很大的提高。用户想要手脚只有攻破银行的服务器来修改自己的存/取款信息,这样做难度会很大。---------这种方式就是服务器端保持状态。
Cookie 与session的产生过程
我们都知道HTTP协议本身是无状态的,客户只需要简单的向服务器来发送请求下载某些文件,客户端向服务器端发送的每次请求都是独立的。对于当前的web应用,HTTP的“无状态”,导致许多应用都不得不花费大量的精力来记录用户的操作步骤。就像我们上面介绍的第一种情况,银行职员要花费大量的精力来记忆每一位用户的存/取款记录。
程序员很快发现,如果能够提供一些按需生成的动太信息,会使web的交互能力大大增强。程序员一方面在HTML中添加表单、脚本、DOM等客户端行为,来增加web应用与客户端的交互性。另一方面在服务器端测出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议添加了文件上载、cookie 等特性。那cookie的原理与我们上面介绍的使用存折记录用户应为的方式是一样一样的。
通过前面的例子我们已经发现,通过cookie的方式存储信息,可能会存在一点定的安全性,因为所有的信息都是写在客户端的,客户可能会对这些信息进行修改或清除。然后就又出现session的方式用于保存用户行为,这种方式的原理与前面介绍银行卡的方式是一样的。
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。
cookie与session的机制与原理
cookie机制。正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
Jsessionid?
Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。
-------------------最新更新--------
Terry_Huang 回复:
给你举个更生动的例子,以前大学的时候,经常去大卡司去喝奶茶,每喝一杯,都可以得到一个印花(第一次喝的时候他会给你个积分卡片),集齐6个印花之后,就可以免费获得一杯奶茶。这样子,印花的信息是保存在客户的积分卡上,你如果不怀好意的话,就自己搞几个神似的印花去骗奶茶喝吧。哈哈,这样子是不是更符合在客户端端保持状态。而拿银行卡去银行取钱,我们的卡只需要保存一个卡号,更多的信息是保存在服务器中,这样也比较符合服务器端保持状态。希望能帮到你。
可能是我的描述不够贴切,积分卡和存折是类似的,用户的存取信息是保存在存折上的,存折又是在客户手里(客户端)可能现在很少有人用存折了,或存折已经被银行取消掉了。
SessionID的本质
一、客户端用cookie保存了sessionID
客户端用cookie保存了sessionID,当我们请求服务器的时候,会把这个sessionID一起发给服务器,服务器会到内存中搜索对应的sessionID,如果找到了对应的 sessionID,说明我们处于登录状态,有相应的权限;如果没有找到对应的sessionID,这说明:要么是我们把浏览器关掉了(后面会说明为什 么),要么session超时了(没有请求服务器超过20分钟),session被服务器清除了,则服务器会给你分配一个新的sessionID。你得重 新登录并把这个新的sessionID保存在cookie中。
在没有把浏览器关掉的时候(这个时候假如已经把sessionID保存在cookie中了)这个sessionID会一直保存在浏览器中,每次请求的时候都会把这个sessionID提交到服务器,所以服务器认为我们是登录的;当然,如果太长时间没有请求服务器,服务器会认为我们已经所以把浏览器关掉了,这个时候服务器会把该sessionID从内存中清除掉,这个时候如果我们再去请求服务器,sessionID已经不存在了,所以服务器并没有在内存中找到对应的 sessionID,所以会再产生一个新的sessionID,这个时候一般我们又要再登录一次。
二、客户端没有用cookie保存sessionID
这 个时候如果我们请求服务器,因为没有提交sessionID上来,服务器会认为你是一个全新的请求,服务器会给你分配一个新的sessionID,这就是 为什么我们每次打开一个新的浏览器的时候(无论之前我们有没有登录过)都会产生一个新的sessionID(或者是会让我们重新登录)。
当我们一旦把浏览器关掉后,再打开浏览器再请求该页面,它会让我们登录,这是为什么?我们明明已经登录了,而且还没有超时,sessionID肯定还在服 务器上的,为什么现在我们又要再一次登录呢?这是因为我们关掉浏览再请求的时候,我们提交的信息没有把刚才的sessionID一起提交到服务器,所以服 务器不知道我们是同一个人,所以这时服务器又为我们分配一个新的sessionID,打个比方:浏览器就好像一个要去银行开户的人,而服务器就好比银行, 这个要去银行开户的人这个时候显然没有帐号(sessionID),所以到银行后,银行工作人员问有没有帐号,他说没有,这个时候银行就会为他开通一个帐 号。所以可以这么说,每次打开一个新的浏览器去请求的一个页面的时候,服务器都会认为,这是一个新的请求,他为你分配一个新的sessionID。
关于jsoup 能处理 session 吗?和js操作session的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ASP.Net会话超时检测:Session.IsNewSession和SessionCookie检测是最好的方法吗?、ASP.Net:如果我有Session ID,可以获取Session对象吗?、Cloud Foundry Session Affinity(Sticky Session)的实现、cookie、session、sessionid 与jsessionid等相关知识的信息别忘了在本站进行查找喔。
本文标签: