session (会话 内置对象 )
同一次会话共享(一旦发送到客户端 无论在那个页面 (同一浏览器内)都可以获取到)
每次访问淘宝、京东等等 平台的服务端都是通过一个session 来区别你(登陆时服务端创建session 退出登录时 、注销时 session失效 )
只要收到请求 服务端自动会创建一个 session 和 Cookie 并且sessionId与 Cookie 的jsessionID完全一致
名字、密码、购买记录 全部都在session里面 只要响应客户端 无论用什么方法 都会发给他一份
换句话说 :客户端在访问服务端时 如果服务端没有JSESSIONID ,则会创建一个name 为JESSIONID 的 Cookie 并返回给客户端
浏览网站 从开始到关闭 为一次会话
购物 从浏览、付款、推出 也是一次会话
电子邮件 浏览、写邮件、推出 也是一次会话
开始—结束
面试 : session 与 Cookie 的区别
保存位置 服务端 客户端 (客户端也有session 但客户端如果改了session 就跟服务端的无法对应了)
安全性 较为安全 比较不安全
保存的内容(value)Object(什么都能放) String
是否是jsp内置对象 是 否
一 session机制
客户端每次给服务端发出请求 每个用户发送的请求 服务端都有一个session来与用户一一对应
(一) 第一次请求
(1) 每个客户端 第一次请求服务端 (如果没有匹配成功 ((cookie jssesionid 和session sessionId))) 服务端都会在内部产生一个独特的session 自带一个唯一的sessionId
(2)并且复制一份 sessionId 为 JSESSIONID 产生一个 name为 JSSIONID value为sessionId的 的 cookie
(3)放到cookie里面 服务端在响应客户端的同时 将cookie发送给客户端
(4)这样每个客户端 就有一个JSESSIONID 与服务端的sessionId 相对应
也就是说 客户端 与服务端 就是通过session和cookie对应起来
服务端 有session (包含sessionid) 客户端 有cookie(里面包含 jsessionid)(客户端也有session 与cookie一样 无论是请求转发 还是重定向 都会把服务端的session 和 创建好的cookie 发送给客户端)
(第二次/n次请求)
服务端 会先用 客户端的cookie中的JESSIONID 去服务端的session中匹配 如果匹配成功 (cookie jssesionid 和session sessionId),说明此用户不是第一次访问 无需再次登录
session 机制(面试)
1 session是存储在服务端 然后发给客户端一个
2 session 是在同一个客户端,请求时共享(这个客户端一般是指某个计算机上的 一个浏览器发出的 用另一个浏览器时 也不会共享 例如 火狐和ie 火狐登陆后 ie不能共享) (只要sessionid 与JSESSIONID 相对应 那么每次请求时动能共享服务端创建的那个session )
3 实现机制 :第一次客户请求时产生一个sessionId 并赋值给cookie的JESSIONID 然后cookie同session 一块 发给客户端 最终通过sessionid 与 JESSIONID 实现一一对应的方法(主要是第三条 前两条讲师傻逼)
session的方法:
getId():获得sessionId (不一定是数字 是一串字符串)
boolean isNew(): 判断是否是新用户 (是否是第一次访问)
void invalidate(): 使session失效 (退出登录时 、注销时 用到)
void setAttribute(name,value); 往session中添加信息
Object getAttribute(name); 从session中获取信息
void setMaxInactiveIntrval(秒) 设置最大有效 非活动时间 如果一直是么都不操作 到达一定秒数 就需要从新登录
int getMaxInactiveIntrval 获得 设置的最大有效非活动时间
以下是用法
// 服务端
String name = request.getParameter(“uname”);
String pwd = request.getParameter(“upwd”);
//session 是内置对象 不需要new 直接就可以用 一般只有登录成功 才会给session开始赋值 请求转发 或者重定向的时候 将session与cookie一起 发送到用户端
session.setAttribute(“uname”,name);
session.setAttribute(“upwd”,pwd);
request.getRequestDispatcher(“welcome.jsp”).forward(request, response);
// 客户端
String name = (String)session.getAttribute(“uname”);(返回值 默认是Object 需要强制转化一下)
if(name!=null){
out.print(name);
}
else {
// 如果没有登录 直接返回登录页
response.sendRedirect(“login.jsp”);
}