JavaWeb之session&Cookie

前言

大家好,这里是九歌的博客,上次九歌分享了 模糊查询等,今天来分享session和Cookie。天天呆在宿舍当然要卷起来啦,不开心就学习。


提示:以下是本篇文章正文内容,下面案例可供参考

一、session

1.session是什么?

session在网络中被称为会话。
由于HTTP协议(超文本传输协议)是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。
为了弥补这一缺点,HTTP协议提供了session
通过session可以在应用程序的WEB页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。
但是,如果在一个会话中,客户端长时间不向服务端发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。

实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,一直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。。

2.运行机制

当一个session开始时,Servlet容器将创建一个Httpsession对象,在Httpsession对象中可以存放客户状态的信息(例如购物车)。
Servlet容器为Httpsession分配一个唯一标识符,称为session ID。 Servlet容器把session
ID作为Cookie保存在客户的浏览器中。
每次客户发出HTTP请求时,Servlet容器可以从HttpServletRequest对象中读取session
ID,然后根据session ID找到相应的Httpsession对象,从而获取客户的状态信息。

3.session对象的生命周期

session对象的生命周期:创建---->使用----->消亡

(1)创建

   //当客户端浏览器第一次访问服务器时,服务器为这个浏览器创建一个Session对象。
   //在服务器端使用request.getSession()或request.getSession(true)方法来获得Session对象。
   request.getSession()	//获得Session对象
   session.getId()		//获得session对象的ID

(2)使用

	//创建Session对象后,使用Session对象进行数据的存取和传输。
	session.setAttribute(String name, Object obj)	//将信息保存在session范围内
	session.getAttribute(String name)		//获取保存在session范围内的信息
	session.getAttributeNames(); 	//返回Session对象中存储的每一个属性对象,枚举型
    session.isNew();			//判断session对象是不是新的

	//具体过程:
	//a. 将产生的sessionID存入到Cookie中;
	//b. 当客户端再次发送请求时,会将sessionID和request一起传送给服务器端;
	//c. 服务器根据请求过来的SessionID与保存在服务端的Session对应起来,判断是否为同一个Session。


	//注意:getAttribute()方法返回的是Object对象,如果将获取的信息赋值给String类型的变量,则需要进行强制类型转换或调用其toString()方法,例如,下面的两行代码都是正确的。
	String user = (String)session.getAttribute("username");
	String user1 = session.getAttribute("username").toString();

(3)消亡

以下3种方法可以结束session对象:
a. 关闭浏览器;
b. 请用HttpSession的invalidate()方法;
c. session超时。

4.设置页面是否使用Session管理会话

<%@page session="false"%>			//表示该JSP页面的Session不可用,默认是true
  sess.setAttribute("username","Join");
  sess.getAttribute("username");

方法:

//方法:
  getCreationTime();		//返回Session被创建的时间.单位毫秒
  invalidate();			//设置session无效,一般用在[安全退出]
  removeAttribute("key");	//删除属性

5.设置Session对象的有效期

//a. 调用setMaxInactiveInterval(long n)进行设定;
// b. 在web.xml中修改:
	<session-config>
	 <!-- 会话超时间长为30分钟 -->
    <session-timeout>30</session-timeout>
	</session-config>

6.Session对象的判断

   //在登录后的JSP页面文件中,通过session来做是否已登录的判断。
      String username=session.getAttribute("username");
      if(username==null){
	  response.sendRedirect("login.jsp");
      }

7.示例

新闻发布系统原本是可以不登录直接进行一系列操作的,现在我们来判断是否登录,如果没有登录就不能进入部分页面。
代码示例:
JavaWeb之session&Cookie_第1张图片
分割线---------------------------------------------------------------------------------------------------------------------------
JavaWeb之session&Cookie_第2张图片
因为没有做动图不好看效果,就委屈一下吧。
JavaWeb之session&Cookie_第3张图片
我们从admin界面进入,但是因为没有登录会直接跳转到登录界面
JavaWeb之session&Cookie_第4张图片

二、Cookie

1.Cookie是什么?

Cookie的中文意思是“小甜饼”,然而在互联网上的意思与这就完全不同了。它和食品完全没有关系。
在互联网中,Cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。
通过cookie的getCookie()方法即可获取到所有cookie对象的集合;
通过cookie对象的getName()方法可以获取到指定名称的cookie;
通过getValue()方法即可获取到cookie对象的值。
另外,将一个cookie对象发送到客户端,使用response对象的addCookie()方法。
注意:在使用cookie时,应保证客户机上允许使用cookie。这可以通过在IE浏览器中选择“工具”/“Internet选项”命令,在打开对话框的“隐私”选项卡中进行设置。

(可以理解客户通过浏览访问服务器时,服务器利用浏览器在客户端上生成了一个文本,该文本用来存储用户的系列信息。)

查看网站的cookie:地址栏输入javascript:alert (document. cookie)

2.Cookie的作用

a. 对特定对象的追踪;
b. 统计网页浏览次数;
c. 简化登录。

3.Cookie的安全性

容易信息泄露。 --文本,可破解,安全性不高 --Cookie具备加密

4.Cookie使用

(1)通过page指令导入包(可省略)

<%@ page import="javax.servlet.http.Cookie" %>

(2)创建

Cookie newCookie=new Cookie("key",value);

(3)写入(将Cookie响应到客户端)

response.addCookie(newCookie);

(4)关于Cookie的删除

Cookie是保存在客户端电脑上的文件,如果服务器可以直接通过代码来清除客户端上的文件,那将是个非常可怕的事情,因为客户端已经变成“肉鸡”了。
所以,客户端的Cookie不能由服务器代码来删,而是客户端自己删。

Cookie不能通过代码删,但可以通过代码设置它无效:即设置它的有效时间。

<%
	Cookie[] cooks=request.getCookies()
	if(cooks!=null){
	    for(Cookie c:cooks){
		if(c.getName().equals("uname")){
		    c.setMaxAge(0);	//设置Cookie有效期0秒
		    response.addCookie(c);
		}
	    }
	}
	response.sendRedirect("/login.jsp");
  %>

(5)常见用法

 void		setMaxAge(int e)	//设置Cookie有效期,单位秒,正数为多少秒后失效
					 // 负数表示当浏览器关闭时,Cookie将会被删除(争议)。
  int		getMaxAge()		//获取Cookie有的效时间,单位秒
  void		setValue(String value)	//在Cookie创建后,对Cookie进行赋值
  String	getValue()		//获取Cookie的值
  String	getName()		//获取Cookie的名称
  Cookie[]	getCookies()		//获取Cookie中所有的属性名

5.案例

例如:最近的浏览记录

代码如下:
在这里插入图片描述

这里是阅读文章的地方,我们将在这里加入cookie来得到我们看过的文章记录,然后在放浏览记录的界面从cookie的里面取出来
JavaWeb之session&Cookie_第5张图片
这是将记录取出来的代码部分。

效果如下:
JavaWeb之session&Cookie_第6张图片

总结

今天分享了session和Cookie,这两者之间的区别还是要分清,两者的用法要搞清楚,还有他们的作用。对啦,如果有错误的地方还请指正,九歌在这里谢谢啦。这里是九歌的博客,一个正在成长的IT练习生。

你可能感兴趣的:(java,tomcat,web,eclipse)