Session :
HttpServletRequest request;
HttpSession session = request.getSession();
Session作用域
HttpSession:会话作用域。
会话:浏览器与服务端建立通讯之后与通讯结束这段期间就叫做会话期间。
A:存放在会话作用域之中的数据与页面没有关系
请求转发和重写向都不会影响Session中数据的作用域。只跟会话
有关系。
B:Session的原理:
当客户端请求到服务端时,服务端为客户端分配一个SessionID。
(request.getSession()时,sessionId才会产生)。
然后就sessionID响应给客户端。
客户端下次请求时,重新将sessionID提交给服务端。服务端就会
以Map的方式(key_value)存放session作用域中的数据。
C:Session是基于用户进程创建的。不是基于用户线程。
D:Session在服务端显示调用request.getSession()时才会显示创建。
同样,Session也只有在服务端显示调用session.inValidate()是才
会被销毁。跟浏览器的开启与关闭没有任何关系。
浏览器关闭之后,并不会关Session。服务端会用Session的超时时间 来判定Session是否过期。
常用途: 保存用户数据,保存在服务端,分配给客户ID
SessionID 被隐式的藏于客户端,以cookie 的方式存储的,要获取sessionid,要获取requset的头部信息,里面 包含了所有的隐式数据
Enumeration enumeration = request.getHeaderNames();
while(enumeration.hasMoreElements()){
Object name = enumeration.nextElement();
Object value = request.getHeader(String.valueOf(name));
System.out.println(name + "/t" + value);
}
Session 的常用方法:
Session.setAttribute("String", Obj); 字符串和对象的邦定
session.getAttribute("String"); 通过字符串来得到对象
session.remove("String"); 移去某个名
session.invalidate(); 注销session
注解:Session底层是以Cookie实现的。将session的ID号放在客户端的Cookie中。
Cookie
Cookie是服务器端或javascript用于维护客户端的一种方式;
Cookie是驻留在客户端的一个文本文件;
作用:
在客户端保存用户相关信息
通过HttpServletRequest对象获取客户端的Cookie信息 : getCookies()
通过HttpServletResponse对象往客户端添加Cookie信息 : addCookie(Cookie)
常用Cookie:
CSDN 登陆列子,几天内不用登陆.....即用cookie实现
写入COOKie
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie1=new Cookie("login_name","admin");
cookie1.setMaxAge(60*60*24*360);
Cookie cookie2=new Cookie("login_pwd","123456");
cookie2.setMaxAge(60*60*24*360);
Cookie cookie3=new Cookie(“login_sex”,
java.net.URLEncoder.encode(“男”,“gb2312”)); //中文要转编码.
cookie3.setMaxAge(60*60*24*360);
response.addCookie(cookie1);
response.addCookie(cookie2);
response.addCookie(cookie3);
}
读出Cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>get cookies</TITLE></HEAD>");
out.println(" <BODY>");
for (int i = 0; i < cookies.length; i++) {
out.println(cookies[i].getName() + " = ");
out.println(cookies[i].getValue());
// 如果值为中文
// out.println(java.net.URLDecoder.decode(cookies[i].getValue(),”GBK”);
out.println("<br>");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}