还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
JavaWeb学习总结Session
一、简单介绍Session(在开发中,服务器可以为每个用户浏览器创建一个会话对象对象),注意WEB session一个浏览器独占一个session对象(默认情况下)因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的中,当用户使用浏览器访问其它程序时,其它程序session可以从用户的中取出该用户的数据,为用户服务session
二、和的主要区别Session Cookie是把用户的数据写给用户的浏览器•Cookie技术把用户的数据写到用户独占的中•Session session对象由服务器创建,开发人员可以调用对象的方法得到Session requestgetSession session对象
三、实现原理session•服务器是如何实现一个为一个用户浏览器服务的?
3.1session服务器创建出来后,会把的号,以的形式回写给客户机,这样,session session id cookie只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带过来了,就会使用内存中与之对应的为之服务可以用如下的代码sessionidsession证明1package xdp.gacl.session;23import java.io.lOException;4import javax.servlet.ServletException;5import javax.servlet,http.HttpServlet;6import javax.servlet,http.HttpServletRequest;7import javax.servlet,http.HttpServletResponse;8import javax.servlet,http.HttpSession;910public classSessionDemol extendsHttpServlet{1112public voiddoGet HttpServletRequestrequest,HttpServletResponse response13throws ServletException,lOException{1415response.setCharacterEncoding〃UTF=8〃;1〃使用request对象的getSessionO获取session,如果session不存在则创建一个2HttpSession session=request.getSessionO;3〃获取session的Id4String sessionld=session.getld;5//判断session是不是新创建的6if session.isNew{7response.getWriter.print^session仓建成功,session的id是/z+sessionld;8}else{9response.getWriter.print〃月艮务器已经存在session,session的id是zz+sessionld;10心对象的销毁时机session对象默认30分钟没有使用,则服务器会自动销毁session,在web.xml文件中可以手工配置的失效时间,例如session电1xml version=〃
1.0〃encoding二〃UTF-8〃?2web-app version=〃
2.5〃3xmlns二〃http://java.sun.com/xml/ns/javaee”4xmlns:xsi二〃http://www.w
3.org/2001/XMLSchema-instance”5xsi:schemaLocation=//http://java.sun.com/xml/ns/javaee6http://java.sun.com/xml/ns/javaee/web-app_2_
5.xsd〃7display-name/display-name89welcome-f ileT ist10welcome-fileindex.jsp/welcome-file11/welcome-file-list12!--设置Session的有效时间以分钟为单位--1314session-config15session-timeout15/s es si on-1imeout16/session-config1718/web-app电当需要在程序中手动设置失效时,可以手工调用方法,摧毁Session session.invalidateosession1HttpSession session=request.getSessionO;2〃手工调用session,invalidate方法,摧毁session3session,invalidate;16response.setContentType text/html;charset=UTF-8〃;17〃使用request对象的getSession获取session,如果session不存在则创建一个18HttpSession session=request.getSession;19〃将数据存储到session中20session.setAttribute data,〃孤傲苍狼〃;21〃获取session的Id22String sessionld=session.getld;23〃判断session是不是新创建的24if session.isNewO{25response.getWriter.print session仓建成功,session的id是/z+sessionld;26}else{27response.getWriter.print〃服务器已经存在该session了,session的id是z/+sessionld;28}293031public voiddoPost HttpServletRequestrequest,HttpServletResponse response32throws ServletException,lOException{33doGet request,response;3435电第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器,如下图所示点击刷新按钮,再次请求服务器,此时就可以看到浏览器再请求服务器时,会把存储到cookie中的session的Id一起传递到服务器端了,如下图所示我猜想request.getSession方法内部新仓ij建了Session之后一定是做了如下的处理心1〃获取session的Id2String sessionld=session.getld;3〃将session的Id存储到名字为JSESSIONID的cookie中4Cookie cookie=new CookieJSESSIONID”,sessionld;5〃设置cookie的有效路径6cookie.setPathrequest.getContextPath;7response.addCookiecookie;
四、浏览器禁用后的处理Cookie session禁用
1.
1.1E8cookie工具-选项-隐私-设置-将滑轴拉到最顶上阻止所有internet cookies解决方案重写
4.2,URL用于对方法后response.encodeRedirectURLjava.lang.String urlsendRedirect的地址进行重写urlresponse.encodeURLjava.lang.String url用于对表单action和超链接的url地址进行重写范例禁用后共享中的数据
4.3,Cookie servletSessionIndexServlet电1package xdp.gacl.session;23import java.io.lOException;4import java.io.PrintWriter;5import java.util.LinkedHashMap;6import java.util.Map;7import java.util.Set;8import javax.servlet.ServletException;9import javax.servlet,http.HttpServlet;10import javax.servlet,http.HttpServletRequest;11import javax.servlet,http.HttpServletResponse;1213〃首页列出所有书14public classIndexServlet extendsHttpServlet{1516public voiddoGetHttpServletRequest request,HttpServletResponse response17throws ServletException,lOException{1819response.setContentType text/html;charset=UTF-8〃;20PrintWriter out=response.getWriterO;21〃创建Session22request.getSession;23out.write〃本网站有如下书〈br/〉〃;24SetMap.EntryString,Book set=DB.getAll.entrySet;25for Map.EntryString,Book me:set{26Book book=me.getValue;27String url=request.getContextPath+z//servlet/BuyServletid=//+book,getld;
42.
120.
21.17:8888/g4studio/重新才查看言:{MfflpageContextMinclude方法弓I入资源First Jsp至Apache Tomcat/
6.
0.13-Error reportHelioWorld3dtest.html建议网站网页快讯库目小蜥看图展匕历史记录acl-pc:8080/JavaWeb_J sp_Study_20140603/inde http://gacl-pc:8080/JavaWeb_HttpServletResponse_Stu!http://localhost:3590/C:\Users\gacl\Desktop\test.htmlhttps://ieonline.microsoft.eom/#ieslice=121315=53540iAv^crrintvnidfffunr+innOZv«r A=imAnt通过查看生成的代码可以看到,每一个超链接后面都带上了的如下所示IndexServlet htmlsession Id,1本网站有如下书<br/〉javaweb开发<ahref=,/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5ABlEAA2537CDE2DB2id=r>购买</a>〈br7>2spring开发<ahref=,/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5ABlEAA2537CDE2DB2id=2,>购买</aXbr/>3hibernate开发<ahref=,/JavaWeb Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5ABlEAA2537CDE2DB2id=3,>购买</aXbr/>4struts开发<ahref=,/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5ABlEAA2537CDE2DB2id=4,>购买</a>〈bi7>5ajax开发<ahref=/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5ABlEAA2537CDE2DB2id=5J>购买〈/aXbr/>所以,当浏览器禁用了cookie后,就可以用URL重写这种解决方案解决Session数据共享问题[fuS response.encodeRedirectURLjava.lang.String url,和response.encodeURLjava.lang.String url是两个非常智能的方法,当检测到浏览器没有禁用cookie时,那么就不进行重写了我们在没有禁用的火狐浏览器下访问,效果如下URL cookie从演示动画中可以看到,浏览器第一次访问时,服务器创建Session,然后将Session的Id以Cookie的形式发送回给浏览器,方法也将进行了重写,当点击刷新按钮第二次访问,由于火response.encodeURLjava.lang.String urlURL狐浏览器没有禁用cookie,所以第二次访问时带上了cookie,此时服务器就可以知道当前的客户端浏览器并没有禁用那么就通知cookie,response.encodeURLjava.lang.String url方法不用将URL进行重写了
五、对象的创建和销毁时机session对象的创建时机在程序中第一次调用方法时就会创建一个新的可以用方法来判断request.getSession Session,isNew Session是不是新创建的范例创建session。
个人认证
优秀文档
获得点赞 0