精华内容
下载资源
问答
  • shiro的session理解
    千次阅读
    2019-10-21 21:33:26

    以问答的形式

    1:session的作用是什么?

    和web容器中的session作用一样,就是用于记录浏览器和服务器之间的交互

    2:登录状态和session有没有关系?

    登录认证成功之后,shiro是将认证信息存储在session中的,以后的每次请求肯定会在过滤器中判断session中有没有认证信息,以作为放行的依据。

    3:为什么要把session持久化,即为sessionDao?是为了分布情况下共享session吗?

    把session持久化的原因有多个,分布式情况下共享session应该是原因之一;持久化就是通过sessionDao完成的。默认情况下,sessionDao的实现是MemorySessionDAO,即把session保存在内存中

    也可以通过这篇文章了解:https://blog.csdn.net/ITWANGBOIT/article/details/102697522

    4:sessionManager可以设置cacheManager?sessionDao也可以设置CacheManager?

    通过查看源码发现:给sessionManager设置的CacheManager最终还是供sessionDao使用,目的就是持久化session到缓存中

    5:Subject.login()登录成功后用户的认证信息实际上是保存在HttpSession中的。如果此时Web应用程序部署了多实例,必须要进行Session同步。

    怎么实现?

    6:SessionDao的作用到底是什么?

    目的是为了将session持久化在内存中(MemorySessionDAO ),或者redis中(shiro-redis)

    也可以通过这篇文章了解:https://blog.csdn.net/ITWANGBOIT/article/details/102697522

    7:Shiro提供了Session的支持,主要用途是在Service层获取到Handler层的Session的信息,推荐在Handler层使用HttpSession。

    实际上httpSession和ShiroSession是一样的,主要受SessionManager的控制。

    8:会话验证调度器?

    默认是开启的,用来验证session的是否过期

    9:session的有效期可以设置,如果session被sessionDao存储了,那么到达有效期时,是不是也会被删除?

    是的,sessionDao持久化session是有原因的,所以到了有效期,也是会删除session的

    10:在用户未退出登录的情况下,关闭浏览器,然后再重新打开一个浏览器去访问系统,为什么展示的就是登录页面?

    关闭了浏览器,cookie失效了,重新打开一个浏览器访问系统时,是没有带着cookie的,所以服务器会认为这是一个全新的访问者,会创建一个全新的session为这次请求服务,上次的session就坐等失效。

    11:session到期

    默认情况下,session到期后,shiro是让其重定向到登录页面,我们可以通过覆盖user过滤器,来改变shiro的重定向行为。

     

    可以参考一下几篇文章:

    https://www.iteye.com/blog/jinnianshilongnian-2028675

    https://blog.csdn.net/qq_38526573/article/details/86661114

    https://blog.csdn.net/ljxbbss/article/details/77771001

     

     

     

     

    更多相关内容
  • 目前社会上对session理解非常混乱:有时候我们可以看到这样的话“在一个浏览器会话期间,…”,这里的会话是指从一个浏览器窗口打开到关闭这个期间;也可以看到“用户(客户端)在一次会话期间”这样一句话,它...
  • 一、使用读写文件的方式保存 SESSION 数据(session.save_handler = files) 1、 session_start() (1). session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾...
  • Session的简单理解

    千次阅读 2018-03-27 01:12:22
    对Session的容易出错的认知 1.Session的创建 Session不是只要客户端访问服务器就被创建,例如你访问静态资源服务器就不会生成SessionSession的生成与 HttpServletRequest.getSession()语句有关,Tomcat...

    Web应用程序是使用HTTP协议传输数据的。而HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,无法辨别这个请求是哪一个用户发出的,这样的话就会造成数据混乱,用户的数据没有安全的保障,整个程序处于混乱的状态,这显然是不行的——于是会话跟踪技术应运而生,弥补了HTTP协议的不足之处。

    会话跟踪是web程序中最常用的技术,通过跟踪用户的整个会话,来辨别是否是同一用户,用于确认用户的身份,保证用户所有的请求操作都属于同一个会话,保证了用户信息的安全私密性,也使得程序井然有序,常用的会话跟踪技术有两种Cookie和Session,这里我们讲Session

    一.什么是Session?

    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(Session),是一种记录客户状态的机制,他不同与Cookie,Session是保存在服务器端,。客户端浏览器访问服务器的时候,服务器把客户端信息以类似散列表的结构形式记录在服务器上。这就是Session。

    二.Session的工作原理

    Cookies的工作原理是:由于服务器从连接上不能辨别用户和记录用户的操作信息,所以引入的Session,而Session就好像一个用户独有的“信息仓库”,当客户端进行第一次请求,服务器就会生成一个"信息仓库和仓库钥匙"给这个客户端,当客户端再次请求(请求+“仓库钥匙”),服务器从“仓库钥匙”上辨认出,这就是xx用户的请求打开专有的“信息仓库”,这样的话我们就可以辨别每个请求对应的用户身份和信息,不会造成数据混乱。

    当服务器需要为客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了Session id,如果Session id存在则说明已经为此客户端创建过Session,服务器就按照Session id把这个Session检索出来使用,r如果没有找到该Session,就会重新创建新的Session,如果客户端请求不包含Session id,则为此客户端创建一个Session并且生成该Session独有的Session id,Session id的值应该是不会重复的24字母组成的的字符串,这个Session id将被在本次请求中返回给客户端保存,用作下次请求进行服务器身份判断,会话状态的保持就是一次次的对接“暗号”中保持进行的。

    三.Session的常用方法

    四.Session的超时时间设置

    Tomcat的Session超时时间默认为30分钟(也就是指客户端如果有30的时间没有和服务器保持会话,则服务器就默认为此Session已经无用,会自动清除此Session,释放服务器资源),在实际项目中通常我们不希望我们的服务器的Session超时时间如此的长,所以我们可以设置Session的超时时间

    1.session.setMaxInactiveInterval(600);参数单位是秒,即在客户端与服务端连续10分钟没有进行会话,Session将失效。

    2.在项目的web.xml中设置,参数单位是分钟,设置为0或-1,则永久不会失效

    <session-config>

    <session-timeout>1</session-timeout>

    </session-config> 

    3.服务器中设置,如Tomcat,找到根目录下conf/web.xml中找到<session-config>,设置参数,单位分钟

    4.人工进行Session销毁:

    HttpSession session = request.getSession();

    session.invalidate();

    如果前三种方法都设置了,则优先级1>2>3

    如若我们要提示用户Session已过期,我们应该在过滤器中进行判断,由request.getSession(); 得到的Session是否为空,jsp页面应该禁用它自己创建Session(这会影响判断用户Session是否超时过期)

    五.Session在客户端禁用Cookie的环境下的使用

     一般保存Session id是用Cookie保存,该Cookie为服务器自动生成的,(它的有效时间一般设为–1,表示仅当前浏览器内有效,关闭浏览器就会失效),再次请求由该Cookie携带Session id访问服务器,但客户端有时会禁用Cookie,因此还可以通过URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,另一种是作为参数附加在URL后面

    当我们把客户端的Cookie功能禁用,这个时候就用到我们的URL重写的技术,response中提供了两个方法进行URL的重写,encodeRedirectURL与encodeURL,它们使用的时候会先判断Session是否超时,是创建新Session,否则进行判断客户端是否禁用Cookie,是则在返回的URL中加上Session id,否则直接返回URL,前者用于重定向,仅与res.sendRedirect一起使用

    1.jsp页面使用:<a href="<%=response.encodeURL("http://localhost:8080/school/selectUser")%>">查询</a> 

    from表单等用法相同

    2.jstl使用:<a href="<c:url value='http://localhost:8080/school/selectUser'/>">查询</a>

    3. Java代码使用:

    (1)response.encodeURL(String url);然后通过jstl,response等方式写到页面上

    (2) encodeRedirectURL方法用于重定向地址,response.sendRedirect(response.encodeRedirectURL(String url));

    4.通过过滤器设置每个请求的URL带Session id参数

    5.手动的创建Cookie,把Session id放入Cookie中

    6.表单隐藏域使用(极其不推荐):(<input type="hidden" 

    name="JSESSIONID" value="CDAE18ABD46C4BE442DA8335B85A6536”>)

    六.Session的优缺点

    优点:

    1.Session中能够存取复杂的的数据,比如Java对象,使得数据交流更加简单有效

    2.Session存储在服务器中,安全性隐私性较高

    3.Session实例是轻量级的,不需要占用服务器太多资源

    缺点:

    1.因为Session保存在服务器,但有大量的Session保存在服务器,会耗费大量服务器内存

    2.Cookie依赖性,因为Session id存储在Cookie中,Cookie被禁用,就没有Session id,就找不到Session,造成Session失效的假象

    3.不可跨域性,比如A网站登录访问B网站,它的Session并不能传递过去,不能公用,这就涉及跨域问题(想了解的自行百度)

    4.Session容易丢失,比如服务器重启

    七.对Session的容易出错的认知

    1.Session的创建

    Session不是只要客户端访问服务器就被创建,例如你访问静态资源服务器就不会生成Session,Session的生成与HttpServletRequest.getSession()语句有关,Tomcat服务器生成Session时就会执行这一句,所以当程序执行这个语句Session才被创建(代码中可不写,编译会加上)

    2.Session关闭浏览器就过时,失效

    关闭浏览器失效的是存储Session id的Cookie,而Session id对应的Session还在服务器中保存着(除非手动的调用清除Session方法和Session过时),所以就造成了Session"失效","过时","被清除"的假象

    3.客户端打开两次,一次为A,一次为B,用的是不同的Session

    客户端打开两次,一次为A,一次为B,在session没有失效之前它们的所使用的的Session是相同的

    若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。

    展开全文
  • Cookie和Session理解

    千次阅读 2017-12-28 20:13:19
    Cookie和Session理解

    本篇文章系自己总结经验,如果有朋友感觉哪里有问题,欢迎留言评论,谢谢~!



    Cookie和Session的产生背景:

    在动态页面里面,每个变量都是有有效期的,所有的变量的最大生命周期就是一个脚本的周期(拿PHP来说,浏览器向服务器发出一次请求,请求到达服务器后,服务器将该请求交由PHP处理,PHP处理完了以后交给服务器,最后服务器响应给浏览器,这就是一个脚本周期,也就是一个变量的最大有效期)。

    这时候问题出来了,如果我登录了一个网站,这个网站需要确定我是不是它的用户,第一次请求我成功登录了该网站的首页,然后我开始浏览这个网站上的其他网页,浏览其他网页的时候,这个网站的服务器该怎么确定我是不是已经登录上了该网站呢?

    这时候就需要使用一个变量来保存这个标志,而这个标志可以代表我是已经合法登录上来了,所以这个变量的有效周期就需要被延长,那么怎么延长呢?

    这个时候会话技术出现了(在同一台浏览器与网站服务器的多次请求之间,将数据持久存储的一种技术),它的前提是B/S请求响应模式,是无状态的(也就是在任意的请求之间,不存在任何的联系,不能将请求状态保持下去。)那么会话机制的实现是用什么来实现的?

    答案是1.cookie 2.Session


    下面是对cookie的介绍:

    百度百科的解释:

        Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。


    从上面我们可以知道,Cookie是浏览器端的一种技术。那么我们写程序的时候应该怎么使用Cookie呢?下面是使用Cookie的基本操作(PHP):


    设置(增删改):

    SetCookie(key, value) :完成Cookie数据的设置(增),key存在则更新(改),不存在则添加。如果值为空字符串,表示删除该key(删)

    获取(查):

    $_COOKIE['KEY']:PHP在初始化阶段,会将所有的cookie数据整理到此变量中,供PHP脚本使用。

    设置Cookie的有效期(第三个参数):

    setCookie("key","value",timestamp):第三个参数采用时间戳表示。

    特殊的有效期值:0:表示默认的,也就是一个会话周期;

      time()-1 :删除Cookie的标准做法,比如:setCookie('key','',time()-1)

    PHP_INT_MAX:逻辑上表示永久有效的Cookie,实际上是到了2038年。。。

    Cookie的有效期

    判定Cookie的有效期的是浏览器,服务器在设置Cookie时,会告诉浏览器该Cookie的有效期。浏览器在发送请求的时候会判断Cookie是否有效,只有没有过有效期的cookie数据才会被携带。

    设置Cookie的有效路径(第4个参数):

    setCookie("key", "value", "timestamp", /): ‘/’:表示整站有效。也就是同一域名下都有效。

    Cookie的有效路径

    Cookie在当前路径以及后代路径有效。这里的路径,不是代码文件所在的本地磁盘路径,而是浏览器访问的url路径关系。不同路径下面,同名的Cookie可以同时存在于浏览器中。也就是Cookie中可能会出现两个key一样的。

    设置Cookie的有效域(第5个参数):

    setCookie("key", "value", timestamp, /, "blog.hengshare.top"):表示在blog.hengshare.top这个二级域名下面都有效。为空表示在当前请求url的域名下面有效。

    设置是否仅安全传输(第6个参数):

    setCookie("key", "value", timestamp, /, domain, true|false):为true表示仅支持安全传输,false为默认值,表示不管是HTTP还是HTTPS,都可以将有效的Cookie携带至服务器端

    设置HTTPonly(第7个参数):

    setCookie("key", "value", timestamp, /, domain, true|false, true|false):默认为false,表示浏览器存储的Cookie是可以被其他脚本所处理的。为true时,表示Cookie仅可以在http请求中使用,建议:true



    下面是对Session的解释:

    同样的,先贴出来百度百科的解释:

    Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。注意 会话状态仅在支持 cookie 的浏览器中保留。

    根据以上解释,我们知道session是一种基于Cookie的一种机制。而与Cookie不同的是,session的会话数据是存放在服务器端的,仅在浏览器端维持一个sessionid,用来标识某个会话对应的服务器端的session数据区,用来配对使用。下面是对session的详细使用(PHP):


    开启session:

    session_start(); :也可以通过PHP的配置文件设置为自动开启。(php.ini中对应的选项为:session.auto_start)

    利用$_SESSION操作session数据:

    $_SESSION['KEY'];  :(session可以存放任意类型的数据,cookie只能存放字符串数据)

    session的会话数据默认存放在服务器端操作系统的临时目录/tmp中。

    销毁session:

    session_destory();    :删除当前的session对应的数据区,关闭session机制。并不完成session的写操作。

    完整删除与当前session相关的全部数据:

    session_destory();  //删除数据区

    unset($_SESSION); //销毁变量

    setCookie(session_name(), '', time()-1); //销毁cookie中的sessionid

    清空session数据:

    $_SESSION=array();   //不要使用unset($_SESSION)

    session 的数据属性:

    1.有效期:session.cookie_lifetime

    2.有效路径:session.cookie_path

    3.有效域:session.cookie_domain

    4.是否仅安全传输:session.cookie_secure

    5.是否仅http使用:session.cookie_httponly

    修改以上的属性有以下几种办法:

    1.更改php.ini配置文件(不建议)

    2.通过在脚本中使用ini_set()来进行配置修改,仅在设置后的脚本周期内有效,要保证在开启session前设置完毕。

    3.使用特定功能函数:session_set_cookie_params(有效期,有效路径,有效域,是否仅安全传输,是否httponly);  注意:也是要在开启session之前设置完毕。


    session的一些注意事项:

    session可以存放任意类型的数据,因为session数据区里面的数据是经过序列化以后才存储的。

    $_SESSION数组的下标,仅仅可以是字符串类型。

    session_start()函数类似于header()函数,前面不应该有输出。

    在同一脚本内使用session_destory()函数,之后如果对session进行了操作,并不会将修改保存到session数据区,所以在下次脚本周期就不能获取到存储的session数据了。

    session和Cookie比较
     Cookiesession
    会话数据存储位置浏览器端服务器端
    安全性
    数据传输量
    支持会话数量有限制,单个最大4k无限制
    支持数据类型字符串ALL


    展开全文
  • 对Session和Cookie的区分与理解 先说session 对SESSION的争论好象一直没有停止过,不过幺麽能理解SESSION的人应该占90以上。但还是讲讲,别嫌老~ 有一些人赞成用SESSION,有一些人不赞成。但这个问题到底要怎么说。...
  • session.save_handler = files 1. session_start() session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是...
  • 所以我理解的意思是,如果用方法1打开session,那么session就不会自动关闭。但事实并不是这样的,即使使用方法1,session使用结束后,同样会自动关闭。 # 方法1: Using the `close()` method. sess = tf.Session() ...
  • 主要介绍了彻底理解cookie,session,token的使用及原理,文中通过示例代码介绍的非常详细,大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 下面小编就为大家带来一篇关于session和cookie的简单理解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 本篇文章是PHP中的Session和Cookie进行了详细的分析介绍,需要的朋友参考下
  • 主要给大家介绍了关于Java Web学习之Cookie和Session的相关资料,需要的朋友可以参考下
  • cookie、session、token的简单理解

    千次阅读 2022-03-13 11:36:33
    2.引入cookie、session、token的目的 使得交互场景中,协议具有记忆能力。 3.cookie 1.cookie是早期的用户状态机制 2.交互流程: 如上图,每次请求的时候都需要带上一定数量的id,根据物品的id,在数据库中进行相应...

    1.无状态协议

    是指协议对于交互的场景,没有记忆能力
    

    2.引入cookie、session、token的目的

    使得交互场景中,协议具有记忆能力。
    

    3.cookie

    1.cookie是早期的用户状态机制
    2.交互流程:
    cookie
    如上图,每次请求的时候都需要带上一定数量的id,根据物品的id,在数据库中进行相应的查找,才能显示出用户选择的商品。从而达到记忆的功能。

    4.session

    1.基于cookie,我们发现服务端本来就存放着用户的数据,那么,我们不需要每次都把用户选择物品的id都存储到cookie中,而是加上一个标识用户身份的id,根据用户的id,去服务端查询出用户相对应的数据。这个id就是sessionID

    2.交互流程
    在这里插入图片描述
    可以看到,cookie中不再存储大量的数据,只存储相应的sessionID即可。

    5.token

    token即no session。

    session机制中大量的数据存在服务器中,导致服务器压力增加,且在多服务器的情况下,只有接收的服务器才具有当前用户的sessionID,而其他服务器
    是没有的,会带来很大的问题。

    token签名验证的方式来识别用户的身份,不会将大量的数据存储在服务端。减轻了服务器的压力。

    交互流程:
    token

    token的组成:
    1.头部
    一般用于描述基信息:

    1.令牌类型
    2.签名算法 [HMAC SHA256等]

    2.载荷
    存放有效信息的部分,尽量不要存放敏感数据。因为这部分数据通过解码后可以查看的到。

    3.签名

    其实token就是一个串,先将头部和载荷进行编码,然后拼接,使用密钥进行签名。

    本篇文章对于token的理解不是特别的透彻,有机会回来更新和修正。大家参考就行,如果错误,请指出。

    展开全文
  • 主要介绍了JSP 中Session的详细介绍的相关资料,希望通过本文能帮助到大家,让大家理解掌握Session的用法,需要的朋友可以参考下
  • 详解C# 中Session的用法

    2020-08-18 18:24:35
    主要介绍了C# 中Session的用法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 先说说,这个机制的用途吧,到现在为止战地知道这个机制有两个方面的用途: 首先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器...
  • 在服务器上,通过Session来区分每一个上网的用户 用户只要一连接到服务器,则立刻分配一个Session用户 Session主要方法: 1、服务器上通过Session来分别不同的用户 → Session ID 任何连接到服务器上的用户,...
  • 借csrf理解session原理

    万次阅读 2021-04-16 22:31:28
    CSRF xss利用站点内的信任用户,csrf通过伪装成受信任用户请求受信任的网站,即攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作 ...session 是以文本形式存储到服务端的,php 自动修改 sessi
  • 详细描述了session的原理及作用,session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session
  • PHP Notice: session_start(): ps_files_cleanup_dir
  • 对session和cookie的深刻理解
  • cookie 和 session理解 和使用场景 以及应用案例
  • Servlet Session理解

    千次阅读 2022-04-26 12:52:23
    Session如何实现: Session内容保存在服务器端的,通常是保存在内存中,当然也可以保存在文件、数据库等等。客户端跟服务器端通过SessionId来关联, SessionId通常以Cookie的形式存储在客户端。每次HTTP请求,...
  • 理解session机制

    2010-02-01 22:48:31
    对于session很多人都听说过,但具体这个概念怎么理解,这里有个说法。
  • Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Session就不存在了。  设置Session超时时间...
  • 简单PHP会话(Session)说明> 是已经圈定了本文的内容范围,试图阐明Session(文中会话称为Session) 在PHP语言中是如何实现以及使用的,重点在于基本理解后的使用。 文章思路是首先搞清楚session是什么东西,Session...
  • 你必须了解的Session的本质.有一点我们必须承认,大多数web应用程序都离不开session的使用。这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制。我们先简单的了解一些http的知识,从而理解该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,853
精华内容 105,941
关键字:

对session的理解