1 什么是会话

  用户开一个浏览器访问某个网站,点击多个链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为会话,与打电话类似。会话过程要解决一些问题,

每个用户在使用浏览器与服务器进行会话时,会产生一些数据,服务器需要为每个用户保存这些数据。Servlet 保存会话信息的技术有:session 与 cookie。

2 cookie

① 为什么需要cookie 技术

  • 登录网站时显示用户最后一次登录时间,不同的用户显示的最后一次登录时间不同;
  • 访问购物网站时,如何保存用户曾经浏览过的商品,并且显示给用户;
  • 登录网站时,显示需要保存登录信息多久;

② 什么是 cookie

cookie 是客户端技术,服务器端把每个用户的信息(登录名,密码等)以cookie 的形式保存在客户端的浏览器缓存目录下的,在需要的时候可以从客户端读取。

③ cookie 工作流程

  ④ cookie 使用

  cookie 像一张表,分两列,一个是名字,一个是值,数据类型都为String。

  cookie 的创建与读取

 //创建Cookie 对象
Cookie cook = new Cookie("name","latiny1");
//设置Cookie生命周期
cook.setMaxAge(3600);
//将cook返回给浏览器
response.addCookie(cook); //读取Cookie
Cookie[] cookies = request.getCookies();

  ⑤ cookie 的特点 

  • cookie是在服务器端创建的;
  • cookie 是保存在浏览器端的(客户端);
  • cookie可以被多个浏览器共享;
  • cookie 重名会覆盖掉之前的cookie,只有最后一个有效;
  • cookie存放时以明文的形式存放,因此安全性比较低;
  • 一个浏览器最多放300个Cookie,一个站点最多放20个cookie,一个cookie大小限制在4K。
  • Cookie默认的生命周期是会话级别(浏览器关闭时,cookie就会被一起删除);通过setMaxAge()可以设置生命周期,设置为0或者负数时,代表清除客户端的cookie。

3 session

① 为什么需要session

如何实现在不同的页面可以查看信息(如购物车),不同的用户看到的信息不一样。

② 什么是session

  Session是服务端技术,服务器在运行时可以为每个用户的浏览器创建一个独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。

③ session 的特点

  • session是放在服务器内存中的;
  • 一个用户浏览器独享一个session域对象;
  • session 生命周期指的从最后一次访问或者操作session 时计算,默认为30minutes,可以通过web.xml修改;

a.  修改 tomcat/cnf/web.xml修改,对所有web应用生效

 <session-config>
<session-timeout>30</session-timeout>
</session-config>

  b. 修改自己项目的web.xml 文件

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

  如果两边配置不一致,则以自己项目配置为准。

  c. 在代码里设置

//设置session的有效时间,从最后一次使用开始计算
session.setMaxInactiveInterval(60);

   

  • session 失效指的整个session失效,而不只是session的某个属性失效;通过函数se.invalidate() 强制整个session失效,通常用于安全退出;设置session 某个属性失效,se.removeAttribute("name"); 重启tomcat,reload web 应用,关机等操作,session都会失效;

  ④ session 的使用

  获取创建session

//获取session
HttpSession se = request.getSession();
se.setAttribute("name","latiny");

  使用session

//获取使用 session
HttpSession se = request.getSession();
String name=(String)se.getAttribute("name");

  

  ⑤ session 实际应用

a. 网上商城购物车

b. 保存用户登录信息

c. 放入某些需要的信息供同一个用户的各个页面使用

d. 防止用户非法登录到某个页面

  ⑥ 禁用Cookie 之后怎么实现购物车功能(购物车要通过session 来实现,而session的信息的传递需要cookie协助),使用encodeURL

  a. 在发送页面加入以下代码

//访问以下session
request.getSession();
String url = response.encodeURL("/ShopCart/BookHandle?id="+book.getId());

  b. 在接受页面对url使用encode

String url = response.encodeURL("/ShopCart/ShowBook");
out.println("<a href='"+url+"' >返回商品页面</a></br>");

  4 Session 与 Cookie 总结

① 存储位置不一样

Cookie存在客户端浏览器的临时文件下。

Session存在服务器端的内存中,一个session域对象为一个用户浏览器服务。

② 存放形式

session是以对象的形式保存在服务器,cookie以字符串的形式保存在客户端。

③ 用途

session 一般用来做客户身份验证,cookie适合保存用户的个人设置,如爱好,登录有效期等。

④ 大小及数量限制

单个cookie在客户端的大小有限制,cookie的个数浏览器也有限制;session理论上没有限制,跟服务器端内存有关。

⑤ 安全性

Cookie 以明文方式存放在客户端的,安全性较低;可以通过加密算法加密之后再存放。MD5

Session 存放在服务器内存中,安全性相对较高。

⑥ 生命周期

Cookie 生命周期是累计的,从创建时就开始计时,例如它的生命周期为30分钟,则从创建时开始计时,30分钟后失效。

Session 生命周期是间隔时间,即从用户最后一次访问session开始计时,例如它的生命周期为30分钟,则30分钟内没有用户访问,它才会失效。关闭tomcat;reload web应用;时间到;调用invalidate方法。

⑤ 访问范围

Session 为一个用户浏览器独享

Cookie 为多个用户浏览器共享

⑥ 使用原则

因为Session 会占用服务器内存,因此尽量少使用session,不要在session存放过多过量的数据,会影响性能。

session与cookie的联系

session需要借助cookie才能正常工作,如果客户端完全禁止cookie,session将会失效,因为session是由应用服务器维持的一个服务端的存储空间,用户在连接服务器时,会由服务器生成唯一的session id,用该session id为标识来存取服务端的session空间。而session id存储在cookie中,用户提交页面时会将这个sesssion id提交到服务端,来存取session数据,这一过程是不用开发人员干预的。

7 Servlet 会话技术的更多相关文章

  1. servlet会话技术:Cookie

    什么是会话会话可以简单理解为:用户开一个浏览器访问某个网站,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话.会话过程中需要解决的一些问题每个用户在使用浏览器与服务器进 ...

  2. Servlet 会话技术cookie和session

    会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...

  3. servlet 会话技术

    一.控制器: 1.如何去确定需要一个新的控制器? 原则:一类事务请求需要一个控制器. 二.会话: 用户开一个浏览器,访问一个网站,只要该浏览器不关闭浏览器,不管该用户点击了多少个超链接,访问了多少个资 ...

  4. servlet会话技术:Session

    问题的引出 1.在网上购物时,张三和李四购买的商品不一样,他们的购物车中显示的商品也不一样,这是怎么实现的呢? 2.不同的用户登录网站后,不管该用户浏览该网站的那个页面,都可以显示登录人的名字,同时可 ...

  5. Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】

    什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使用会话技术 ...

  6. 会话技术( Cookie ,Session)

    会话技术:    会话:浏览器访问服务器端,发送多次请求,接受多次响应.直到有一方断开连接.会话结束.        解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据.           ...

  7. Java Web之会话技术

    客户端与服务器通信过程中,会产生一些数据.比如,A和B分别登陆了某宝购物网站,A买了一个Android手机,B买了一个iPhone手机,当结账时,web服务器需要分别对用户A和B的信息分别保存.根据J ...

  8. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  9. JSP入门&会话技术

    一.JSP    1.jsp技术        jsp是sun提供动态web资源开发技术.为了解决在Servlet中拼写html内容css.js内容十分不方便的问题,sun提供了这样一门技术.如果说S ...

随机推荐

  1. es6的let,const

    1.es6 新增的let const 命令 let用来定义一个局部变量,故名思意就是只在当前代码块可用 1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 ...

  2. js 颜色16进制转RGB方法

    //颜色16进制转RGB方法 String.prototype.colorRgb = function(){ var sColor = this.toLowerCase(); //十六进制颜色值的正则 ...

  3. 小tips:JS之for in、Object.keys()和Object.getOwnPropertyNames()的区别

    for..in循环 使用for..in循环时,返回的是所有能够通过对象访问的.可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例.这里需要注意的是使用for-in返回的属性因各个浏览器厂 ...

  4. 从零学习Fluter(五):Flutter中手势滑动拖动已经网络请求

    从六号开始搞Flutter,到今天写这篇blog已经过了4天时间,文档初步浏览了一遍,写下了这个demo.demo源码分享在github上,现在对flutter有种说不出的喜欢了.大家一起搞吧! 废话 ...

  5. 新更新,又是一年了。这次记录下关于android版的WeiboDemo的问题

    时隔一年多,现在又开始折腾android的代码了.之前看了Learning android,就想看下能否移植到Weibo.然后就下了weibo的代码,代码包里有个实例叫WeiboSDKDemo. 为了 ...

  6. 拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息

    首先前往拉勾网“爬虫”职位相关页面 确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是PO ...

  7. PowerShell执行脚本时“系统上禁止运行脚本”问题解决

    PowerShell执行脚本策略错误 错误信息:PowerShell运行脚本错误--"系统上禁止运行脚本" 原因:默认执行策略为Restricted 解决:执行Set-Execut ...

  8. Java Api Consumer 连接启用Kerberos认证的Kafka

    java程序连接到一个需要Kerberos认证的kafka集群上,消费生产者生产的信息,kafka版本是2.10-0.10.0.1: Java程序以maven构建,(怎么构建maven工程,可去问下度 ...

  9. ERROR in static/js/0.5d7325513eec31f1e291.js from UglifyJs

    今天把vue项目打包是遇到这个问题.这是在服务器上打包时报的错误,本地打包不报错!很头疼!上网查了很多,发现有很多人和我遇到类似的问题,但是都没有解决我的问题!后来灵机一动,解决问题,这就跟大家说一下 ...

  10. excel poi导出demo

    最近做了一个excel 导出的demo,是抄写老大的(嘻嘻嘻),现在把demo源码放在这里 链接:https://pan.baidu.com/s/1_xj0hej-1xwX5JF39acEOg 提取码 ...