session对象

JSON Web Token 入门教程

巧了我就是萌 提交于 2019-12-20 20:47:12
作者: 阮一峰 日期: 2018年7月23日 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。 3、服务器向用户返回一个 session_id,写入用户的 Cookie。 4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。 5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。 这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。 举例来说,A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现? 一种解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。 另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端

认证方案之初步认识JWT

拥有回忆 提交于 2019-12-20 20:44:57
前言 : 现在越来越多的项目或多或少会用到JWT,为什么会出现使用JWT这样的场景的呢? 假设现在有一个APP,后台是分布式系统。APP的首页模块部署在上海机房的服务器上,子页面模块部署在深圳机房的服务器上。此时你从首页登录了该APP,然后跳转到子页面模块。session在两个机房之间不能同步,用户是否需要重新登录? 传统的方式(cookie+session)需要重新登录,用户体验不好。session共享(在多台物理机之间传输和复制session)方式对网络IO的压力大,延迟太长,用户体验也不好。 说到这大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用token呢?网上有许多文章来比较token和session的优缺点,其实,开发web应用的话用哪种都行。但如果是开发api接口,前后端分离,最好使用token,为什么这么说呢,因为session+cookies是基于web的。但是针对 api接口,可能会考虑到移动端,app是没有cookies和session的。 Session方式存储用户信息的最大问题在于要占用大量服务器内存,增加服务器的开销。 而JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力。Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端 原理 : JSON

Java EE会话技术Cookie和Session

蹲街弑〆低调 提交于 2019-12-20 02:45:08
会话技术 一、定义 会话技术是帮助服务器记住客户端状态的(区分客户端的)。将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术。 注意: 一次会话何时开始?从打开一个浏览器访问某个站点时开始 一次会话何时结束?到关闭这个浏览器的时候结束。而不是关掉某个站点时 Cookie和Session的区别 Cookie:数据存储在客户端本地,减少服务器端的存储压力,但是安全性不好,客户端可以清除Cookie Session:将数据存储到服务器端,安全性相对较好,但是增加了服务器的压力 二、Cookie技术 学习分为两个方面 服务器端怎样将一个cookie发送到客户端 服务器端如何接收客户端携带的cookie //1创建cookie对象,cookie不能存中文,只能存储非中文字符串 Cookie cookie = new Cookie("name", "zhangsan"); //2以头的形式将cookie中的信息发送到客户端 response.addCookie(cookie); 默认Cookie的级别是会话级别,即关掉浏览器,缓存的东西就被清除。那么如何让cookie持久化呢? 如果访问每一个网页都带着cookie,这会增加响应时间。因此我们应该为cookie指定访问哪些资源时需要携带的路径。 注意:如果不设置携带路径

OpenSessionInViewFilter与org.springframework.dao.InvalidDataAccessApiUsageException

社会主义新天地 提交于 2019-12-20 02:32:25
报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 搞开发的时候碰到这个问题,在网上搜了一下原因,归纳成以下几个知识点,部分摘抄网络原文:   1、延迟加载:   Hibernate允许关联对象进行延迟加载,前提是必须保证延迟加载操作是在同一个Session范围之内进行。如果Service层返回了一个已启用延迟加载的领域对象给View层,当View层访问那些需要延迟加载的数据时,由于加载领域对象的Session已经关闭,将导致延迟加载数据的访问异常(org.hibernate.LazyInitializationException)。   2、OpenSessionInViewFilter:   总所周知,Java类或者方法命名以长著称,OpenSessionInViewFilter也是,顾名思义,它能够让我们在View层保持Session继续Open

爬虫

依然范特西╮ 提交于 2019-12-20 01:13:18
http:   超文本传输协议   默认端口:80 https:   http+ssl(安全套接字层)   默认端口:443 https比http更安全,但是性能更低(耗时更长) GET 和 POST 方法有什么区别呢? 哪些地方会用到post请求:   登录注册(post 比 get 更安全)   需要传输大文本内容的时候(post 请求对数据长度没有要求) 所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求 cookie 和 session的区别: cookie数据存放在客户的浏览器上,session数据存放在服务器上 cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 session会在一定时间内保存在服务器上,当访问增多,会比较占用你的服务器的性能 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie 爬虫处理cookie和session 带上cookie,session的好处:   能够请求到登录之后的页面 带上cookie,session的弊端:   一套cookie和session往往和一个用户对应   请求太快,请求次数太多,容易被服务器识别为爬虫 不需要cookie的时候尽量不去使用cookie 但是为了获取登录之后的页面,我们必须发送带有cookies的请求

java面试必须掌握的技术点--基础篇--(二)

孤者浪人 提交于 2019-12-19 15:06:07
基本功 HTTP 请求的 GET 与 POST 方式的区别 GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 GET和POST还有一个重大区别,简单的说: GET产生一个TCP数据包; POST产生两个TCP数据包。 长的说: 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么? 1. GET与POST都有自己的语义,不能随便混用。 2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。 3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

深入理解JWT的使用场景和优劣

这一生的挚爱 提交于 2019-12-18 20:10:34
深入理解JWT的使用场景和优劣 原创: 徐靖峰 Kirito的技术分享 Kirito的技术分享 微信号 cnkirito 功能介绍 「技术分享」某种程度上,是让作者和读者,不那么孤独的东西。「Kirito的技术分享」致力于探讨 Java 生态的知识点,内容覆盖分布式服务治理,微服务,性能调优,各类源码分析。追求有深度并兼具表达力的文字。 2018-04-20 经过前面两篇文章《JSON Web Token - 在Web应用间安全地传递信息》《八幅漫画理解使用JSON Web Token设计单点登录系统》的科普,相信大家应该已经知道了 JWT 协议是什么了。至少看到 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJxaWFubWlJZCI6InFtMTAzNTNzaEQiLCJpc3MiOiJhcHBfcW0xMDM1M3NoRCIsInBsYXRmb3JtIjoiYXBwIn0.cMNwyDTFVYMLL4e7ts50GFHTvlSJLDpePtHXzu7z9j4 这样形如 A.B.C 的字符串时能敏感地认出这是使用了 jwt。发了这两篇文章后,有不少读者在文末留言,表达了对 jwt 使用方式的一些疑惑,以及到底哪些场景适合使用 jwt。我并不是 jwt 方面的专家,和不少读者一样,起初研究时我也存在相同疑惑,甚至在逐渐接触后产生了更大的疑惑

ORACLE锁机制

▼魔方 西西 提交于 2019-12-18 11:46:09
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。 Oracle数据库的锁类型 根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护 数据库的内部结构。 DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

Session与cookie

ぃ、小莉子 提交于 2019-12-18 01:07:47
session的实现与工作原理 浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢? 这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字, 或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上 由服务器为它生成的session_id. 简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器, 浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。 以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。 如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息

【监听器】监听器使用

白昼怎懂夜的黑 提交于 2019-12-17 22:55:08
一、监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet listener filter 1.什么是监听器? 监听器就是监听某个对象的的状态变化的组件 监听器的相关概念: 事件源:被监听的对象 ----- 三个域对象 request session servletContext 监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器 ---- 6+2 注册监听器:将监听器与事件源进行绑定 响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代 码 2.监听器有哪些? 第一维度:按照被监听的对象划分:ServletRequest域 HttpSession域 ServletContext域 第二维度:监听的内容分:监听域对象的创建与销毁的 监听域对象的属性变 化的 3.监听器使用步骤 监听器的编写步骤(重点): a、编写一个监听器类去实现监听器接口 b、覆盖监听器的方法 c、需要在web.xml中进行配置---注册 4. 监听ServletContext域的创建与销毁的监听器ServletContextListener 1.Servlet域的生命周期 何时创建:服务器启动创建 何时销毁:服务器关闭销毁 2.实现类 package listener