JavaWeb07(session&Cookie)

认识session、Cookie、application的原理及应用

jsp的内置对象的范围有哪些

了解session与Cookie的原理及应用

//让session失效
session.invalidate();
//返回登录
response.sendRedirect("/q4/login.jsp");

//判断/遍历
 	if(rs.next()){
 		//说明登录成功
 		//跳转到新闻发布系统的主界面 
 		
 		/*session的应用场合:
 			1.记录用户登录状态 判断用户是否登录 
 			2.建议大家可以保存User对象(uuid uname upwd urole)
 			3.session版的购物车(增删改查)  List<Goods>
 			
 		Cookie的应用场合:
			1.简化登录 免登陆 
			2.历史记录(浏览记录) 
			
			浏览记录思路提示:
				1.在阅读界面存Cookie(Cookie c=new Cookie(新闻的编号name,新闻的标题value);) 
				2.在主界面(admin.jsp)/游客界面(index.jsp)取出所有的Cookie 遍历打印value值
					Cookie[] cs=request.getCookies;
					for(Cookie c:cs){
						out.print(c.getValue());
					}
					
			需要解决三个问题:
				1.解决中文乱码问题 :URLEncoder URLDecoder
				2.解决用户名和sessionID问题 
				3.解决Cookie跨域问题 
 		
 		*/
 			
 		//记录用户的登录状态/信息
 		//session.setAttribute("uname",name);//键String,值Object
 		//设置session的最大有效非活动时间 10秒
 		//session.setMaxInactiveInterval(10);
 		
 		//打印session的编号:862FF3298197894980E3B9C62B093009
 		//System.out.print(session.getId());
 		
 		//Cookie
 		Cookie c=new Cookie("xname",name);//name,value
 		//设置Cookie的有效期10s 一周内免登录
 		c.setMaxAge(60*60*24*7);//复选框
 		//加入响应
 		response.addCookie(c);

session

Cokie的原理和方法

//Cookie
 Cookie[] cs=request.getCookies();
 
 //假设法
 boolean f=false;//假设没有登录
 if(cs!=null){
	 //循环遍历
	 for(Cookie c:cs){//数组或者集合的数据类型 变量名:数量名或者集合名
		 if("xname".equals(c.getName())){//说明令牌对了 说明登录了
			//if("admin".equals(c.getValue())){//不合适
			 f=true;
 }

	 }
 }
 if(f==false){
	 response.sendRedirect("/q4/login.jsp");
 }
%>
Cookie 小甜饼

1.概念
    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)
    cookie所在的位置:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies

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

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

5.Cookie使用
  5.1 通过page指令导入包(可省略)
  <%@ page import="javax.servlet.http.Cookie" %>

  5.2 创建
  Cookie newCookie=new Cookie("key",value);

  5.3 写入(将Cookie响应到客户端)
  response.addCookie(newCookie)


  提示:
  a. 在创建Cookie后,如未设置Cookie有效期,则该Cookie只保存在浏览上,当浏览重启后,之前设置的Cookie就不在了,如这时用getCookies()方法取就是null,因此会报NullPointerException异常。

     临时Cookie----保存在浏览器上的Cookie。它随着浏览器的关闭而消失。
     要想Cookie真正保存在客户端上,就必须设置Cookie的保存时间。

  b. Internet临时文件设置,如勾上,则会清掉cookie。


  5.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");
  %>


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


7.项目案例:
  1 登录及注销
  2 记住密码(checkbox为null==没勾选上)
    如勾选上了,再输入login.jsp时会自动跳转到管理员面去。
  3 最近的浏览记录(思考)




8.案例代码:
------从登录验证页面表单中获取用户名--------
<%
    String username=request.getParameter("txtName");	//获取登录用户名信息
    Cookie myCook=new Cookie("uname",username);		//创建Cookie,并写入用户信息
    response.addCookie(myCook);				//响应
    ……
%>
-----在显示页面显示用户名--------------
<%
    Cookie[] cookies=request.getCookies();	//获取请求中的Cookie,以数据方式保存
    if(cookies!=null){
    	for(Cookie c:cookies){			//遍历数组,得到key=uname的Cookie
		if(c.getName().equals("uname")){	//判断Cookie的名称
		    out.println("欢迎您:"+c.getValue());
		}
   	 }
    }
%>

 

 怎么实现访问控制

 

什么是application 

什么是include指令 

 

 会话是什么 

 

会话跟踪(session与cookie)


一、Session对象

1.概念
    Session在网络中被称为会话。
    由于HTTP协议(超文本传输协议)是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。
为了弥补这一缺点,HTTP协议提供了Session。

通过Session可以在应用程序的WEB页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。

但是,如果在一个会话中,客户端长时间不向服务端发出请求,Session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。

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

  **********************************************************
  Session就是会话(客户端的一次请求,服务端的一次响应)。
  Session用于跟踪客户的状态。
  Session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程。
  在一个Session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。
  **********************************************************



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



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

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

	例:HttpSession sess=request.getSession();	//获取Session对象


  4.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();



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


5.设置页面是否使用Session管理会话
  <%@page session="false"%>			//表示该JSP页面的Session不可用,默认是true
  sess.setAttribute("username","Join");
  sess.getAttribute("username");


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


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


7. HttpSession与URL重写:
  URL重写是用在客户端不支持Cookie的情况下,它的实现方式是将Session ID添加到URL中,服务器通过解析重写后的URL获取Session ID,这样即使客户端不支持Cookie,也可以用Session来记录状态信息。
	response.encodeURL("login.jsp");
	或者
	response.sendRedirect(response.encodeRedirectURL("login.jsp"));
	两种方法效果一样,如果客户端支持Cookie,则生成的URL不变;如果不支持,生成的URL中会带有“login.jsp;jession=……?username=join”字符串的地址。

	response.sendRedirect("a.jsp");

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

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值