关于session和Cookie的学习总结

前天开始看Java Web中的JSP内置对象一部分,在看完书以及视频后,对Cookie,session,response等的理解感觉特别不透彻,一直搞不清楚都是保存在哪里的。今天下午做了几个小实验,基本算是搞清楚了,写出来分享给大家,有经验的看看我说的对不对。

四个内置对象:page,request,session和application都是保存在服务器上的,为什么是四个而不是五个,response对象是服务器对客户端进行回应的,他不用来保存客户端请求的信息所以不在其中,在用户输入网址对服务器提交请求后,WEB容器也就是tomcat服务器创建了这些对象供使用,除了application以外的内置对象都是关闭浏览器窗口后都会自动消失的,但他们的作用范围或者消失时间是不一样的,session范围大一些,只要用户登录后不注销,不关闭窗口都会一直存在,而request则是服务器端跳转会保存,客户端跳转不保存,page是只要跳转就消失。

我做了这样一个小程序用来验证用户名密码,在登录页输入用户名密码和Cookie保存时间,将这些信息通过action传递给检查页,连接数据库检查正确后将使用session.setAttribute("name",rs.getString(1)) 和session.setAttribute("id",mid);这两个语句保存将信息保存在session中,同时创建Cookie对象:Cookie c1 = new Cookie("mid",mid);Cookie c2 = new Cookie("password",password);并设置Cookie的时间范围,进而跳转到欢迎页面,欢迎页面检查是否存在session的属性,如果存在则表明已经登录过,继续执行,否则跳转回登录页。

接下来要说保存的Cookie到底如何使用,我们创建了另外一个Cookie_operate.jsp文件,里面设置着使用过程,并将这个页面加入欢迎页,即在欢迎页的最开头假如jsp:include语句:<jsp:include page="Cookie_operate.jsp"/>,这样做的话如果已经保存了cookie,既是是关闭或注销页面后直接访问欢迎页也是可以访问的,因为Cookie保存在客户端,没有消失。在operation文件中,我们先检查session的id属性是否为空,如果为空则表示用户没有登录,进行下面的判断,判断将拿出保存在浏览器的Cookie信息,并提交到数据库去查询,如果有匹配的,则在此时设置session的id属性和name属性,文件执行完毕会继续往下执行。源代码如下:

login.jsp

<% request.setCharacterEncoding("GBK") ;%>

登陆程序


用户  ID:
密    码:
保存密码:
验证码:

check.jsp

<% // 乱码解决request.setCharacterEncoding("GBK") ;%>

登陆程序


<%String rand = (String) session.getAttribute("rand") ;// 从session中取出验证码String code = request.getParameter("code") ;if(!rand.equalsIgnoreCase(code)){request.setAttribute("info","请输入正确的验证码!") ;%><%}%><%!public static final String DBDRIVER = "com.mysql.jdbc.Driver" ;public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;public static final String DBUSER = "root" ;public static final String DBPASSWORD = "root" ;%><%Connection conn = null ;PreparedStatement pstmt = null ;ResultSet rs = null ;%><%String mid = request.getParameter("mid") ;String password = request.getParameter("password") ;String sql = "SELECT name FROM member WHERE mid=? AND password=?" ;%><%boolean flag = false ;Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;pstmt = conn.prepareStatement(sql) ;pstmt.setString(1,mid) ;pstmt.setString(2,password) ;rs = pstmt.executeQuery() ;// 进行查询if(rs.next()){// 现在可以查找到内容session.setAttribute("name",rs.getString(1)) ;//保存用户名session.setAttribute("id",mid);//保存用户IDCookie c1 = new Cookie("mid",mid);Cookie c2 = new Cookie("password",password);int savetime = Integer.parseInt(request.getParameter("savetime")) ;c1.setMaxAge(savetime);c2.setMaxAge(savetime);response.addCookie(c1);response.addCookie(c2);flag = true ;}conn.close() ;// 关闭数据库连接%><%if(flag){ // 现在已经登陆成功%><%} else {request.setAttribute("info","错误的用户名或密码!") ;%><% }%>

welcome.jsp

登陆程序


<%if(session.getAttribute("name") != null){%>

欢迎<%=session.getAttribute("name")%>光临!

登陆注销

<% } else {request.setAttribute("info","请先登陆!") ;%><%}%>

cookie_operate.jsp

<% // 乱码解决request.setCharacterEncoding("GBK") ;%><%if(session.getAttribute("id") == null) {// 用户现在还没有登陆过%><%!public static final String DBDRIVER = "com.mysql.jdbc.Driver" ;public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;public static final String DBUSER = "root" ;public static final String DBPASSWORD = "root" ;%><%Connection conn = null ;PreparedStatement pstmt = null ;ResultSet rs = null ;%><%String mid = null ;String password = null ;Cookie c[] = request.getCookies() ;if(c != null) {for(int x=0; x<%boolean flag = false ;Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;pstmt = conn.prepareStatement(sql) ;pstmt.setString(1,mid) ;pstmt.setString(2,password) ;rs = pstmt.executeQuery() ;// 进行查询if(rs.next()){// 现在可以查找到内容// 如果用户登陆成功了,则进行保存Cookie的操作。session.setAttribute("name",rs.getString(1)) ;//保存用户名session.setAttribute("id",mid) ;// 保存midflag = true ;}conn.close() ;// 关闭数据库连接%><%}}%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值