各位看官好,今天我带来的是JSP项目如何使用session和Cookie。
目录
k.c、新建一个界面,用来判断用户是否登录,再使用include再各个界面判断,如果没有登陆,就返回登陆界面
e.b、新建一个界面,用来判断用户是否登录,再使用include再各个界面判断,如果没有登陆,就返回登陆界面
一、Session对象
A、概念:
Session在网络中被称为会话。
由于HTTP协议(超文本传输协议)是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。
为了弥补这一缺点,HTTP协议提供了Session。通过Session可以在应用程序的WEB页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。
但是,如果在一个会话中,客户端长时间不向服务端发出请求,Session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。
实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,一直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。
session可以称为会话,它是jsp的常用内置对象之一
B、什么是会话?
浏览器的打开和关闭之间称之为一次会话,作用于服务器端。
C、Session的运行机制
当一个Session开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户状态的信息(例如购物车)。
Servlet容器为HttpSession分配一个唯一标识符,称为Session ID。
Servlet容器把Session ID作为Cookie保存在客户的浏览器中。
每次客户发出HTTP请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,然后根据Session ID找到相应的HttpSession对象,从而获取客户的状态信息。
D、Session对象的生命周期
创建 --> 使用 --> 消亡
E、Session有什么作用?
可以储存用户的登陆状态,继而用来判断用户是否是登录状态等
F、Session的语法
G、创建
当客户端浏览器第一次访问服务器时,服务器为这个浏览器创建一个Session对象。
在服务器端使用request.getSession()或request.getSession(true)方法来获得Session对象。
request.getSession() --获得Session对象
session.getId() --获得session对象的ID例:HttpSession sess=request.getSession(); //获取Session对象
H、使用
创建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();
I、设置Session对象的有效期:
//设置session的有效非活动时间 以秒为单位
session.setMaxInactiveInterval(10);
J、消亡
以下3种方法可以结束session对象:
a. 关闭浏览器;
b. 请用HttpSession的invalidate()方法;
c. session超时。
K、使用Session判断用户是否登录
k.a、思路
k.b、登录时获取登录信息
//记录用户的登录信息=保存用户的登录信息
session.setAttribute("uname", name);//键String,值Object
k.c、新建一个界面,用来判断用户是否登录,再使用include再各个界面判断,如果没有登陆,就返回登陆界面
//从session中取出用户的登录信息
//String name=(String)session.getAttribute("uname");//根据键取得对应的值
//判断
if(name==null){//没拿到值 说明没登录
response.sendRedirect("/s4/login.jsp");
}
<!-- 验证登陆 -->
<%@include file="yz.jsp" %>
L、设置页面是否使用Session管理会话
<%@page session="false"%> //表示该JSP页面的Session不可用,默认是true
sess.setAttribute("username","Join");
sess.getAttribute("username");
方法:
getCreationTime(); //返回Session被创建的时间.单位毫秒
invalidate(); //设置session无效,一般用在[安全退出]
removeAttribute("key"); //删除属性
二、Cookie
A、概念:
Cookie的中文意思是“小甜饼”,然而在互联网上的意思与这就完全不同了。它和食品完全没有关系。
在互联网中,Cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。1、Cookie,有时候也用复数形式Cookies,这种是指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密);简单来说就是它能够把你在访问网站时的产生的一些行为信息给读取保存下来,常用的是我们在访问某些网页时提示我们是否需要保存用户名和密码,下次登录的时候能够自动登录,无需重新登录;
2、Cookie 技术诞生以来,它就成了广大网络用户和 Web 开发人员争论的一个焦点。有一些网络用户,甚至包括一些资深的 Web 专家也对它的产生和推广感到不满,这并不是因为 Cookie 技术的功能太弱或其他技术性能上的原因,而是因为 Cookie 的使用对网络用户的隐私构成了危害。因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息
B、生活中的Cookie
浏览购物网站查看不同商品时,系统会自动记录已经浏览过的商品
c、Cookie的使用
c.a、通过page指令导入包(可省略)
<%@ page import="javax.servlet.http.Cookie" %>
c.b、创建
Cookie newCookie=new Cookie("key",value);
c.c、写入(将Cookie响应到客户端)
response.addCookie(newCookie)
D、Cookie常用方法
E、 使用Cookie判断用户是否登录
e.a、获取用户登录信息
//使用Cookie判断用户是否登录
Cookie c=new Cookie("sname",name);//name,value
//写入响应
response.addCookie(c);
e.b、新建一个界面,用来判断用户是否登录,再使用include再各个界面判断,如果没有登陆,就返回登陆界面
//拿到所有的Cookie
Cookie []cs = request.getCookies();
//假设法
boolean f=false;
if(cs!=null){
//遍历
for(Cookie s:cs){//数组或者集合的数据类型 变量名:集合
if("sname".equals(s.getName())){
f=true;
}
}
}
//没有登录
if(f==false){
response.sendRedirect("/s4/login.jsp");
}
<!-- 验证登陆 -->
<%@include file="yz.jsp" %>
F、设置 用户登录后免登陆的时间
在e.a的基础上编写:
c.setMaxAge(60*60*24*7);//一周内免登陆
F.a、免登陆注意事项
浏览器的浏览记录清空时,也会把Cookie的免登陆清理掉
三、使用Cookie实现浏览记录
A、思路
1.在阅读界面 把值存到Cookie c=new Cookie(name[nid],value[标题]);
2.在主界面/游客界面取出来所有的Cookie
Cookie[]cs=request.getCookies;
for(){
out.print(c.getValue());
}
B、代码
//存到Cookie
Cookie c=new Cookie(nid,URLEncoder.encode(title,"utf-8"));
//设置Cookie的共享目录
c.setPath("/");
//加入响应
response.addCookie(c);
<h2>浏览记录</h2>
<%
Cookie[] css=request.getCookies();
if(css!=null){
for(Cookie c:css){
if(!c.getValue().equals(session.getId())&&!"sname".equals(c.getName())){
out.print("<a href='/s4/news/read.jsp?nid="+c.getName()+"'>"+URLDecoder.decode(c.getValue(),"utf-8")+"</a><br/>");
}
}
}
%>
C、效果
四、Session和Cookie的应用场合
session的应用场合
1.保存用户登录状态 判断用户是否登录
2.后期建议直接保存User对象 (uid uname upwd urole)
3.购物车项目 将整个购物车保存到session中 List<Goods>
Cookie的应用场合
1.免登陆
2.历史记录(浏览记录)
OK,以上所有就是今日学习的所有内容了,我是小陽,欢迎个位看官能观看我的文章,如果有写的不好/不足的地方欢迎大家指出来,博主会做出改变,如对各位有所帮助,不介意各位留下免费的三连哦!
下期内容:application&JavaBean封装