cookie和session的区别
- Cookie1是把用户数据写给用户的浏览器,浏览器保存可以保存多个
- session把用户数据写到用户独占的session中,服务器端保存,保存重要信息,减少服务器资源的浪费
- session对象由服务器创建
cookie的创建与使用
//解决中文乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
//cookie,服务器从客户端中获取
Cookie[] cookies = req.getCookies();//这里返回的是数组,说明Cookie可能存在多个
if (cookies == null) {
writer.print("这是您第一次访问本站!");
} else {
writer.print("您上一次访问本站的时间是:" );
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//注意这里的name要与创建的name相同
if ("lastLoginTime".equals(cookie.getName())) {
long lastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(lastLoginTime);
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
writer.print(sd.format(date));
}
}
}
//添加 or 更新
Cookie cookie = new Cookie("lastLoginTime", "" + System.currentTimeMillis());
//设置cookie为1天
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);
writer.flush();
}
//手动删除cookie
Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
//将cookie的有效期设置为0,立马过期
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
//解决中文乱码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter writer = resp.getWriter();
//cookie,服务器从客户端中获取
Cookie[] cookies = req.getCookies();
if (cookies == null) {
writer.print("这是您第一次访问本站!");
} else {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if ("name".equals(cookie.getName())) {
//防止网络传输中文乱码问题
writer.print(URLDecoder.decode(cookie.getValue(), "UTF-8"));
// 解码
// URLEncoder.encode("中文","utf-8");
}
}
}
//添加 or 更新
Cookie cookie = new Cookie("name", URLEncoder.encode("狂神", "UTF-8"));
resp.addCookie(cookie);
writer.flush();
}
session的创建与使用
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
//得到session
HttpSession session = req.getSession();
//给session中存东西
session.setAttribute("name",new Person("严",22));
//获得session的id
String id = session.getId();
//判断是不是新创建的
if( session.isNew()){
resp.getWriter().write("session创建成功,sessionID为:"+id);
}else{
resp.getWriter().write("session已经在服务器中存在"+id);
}
//session创建的时候做了什么?
Cookie cookie = new Cookie("B048DA3323F9EBC7AF98D09D3C7657BC", id);
resp.addCookie(cookie);
//得到session
HttpSession session = req.getSession();
Person person=(Person) session.getAttribute("name");
System.out.println(person.toString());
// 手动注销session
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();
创建的一个对象类
package com.yan.session;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
web.xml
<servlet>
<servlet-name>SessinDemo01</servlet-name>
<servlet-class>com.yan.session.sessionDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessinDemo01</servlet-name>
<url-pattern>/s</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SessinDemo02</servlet-name>
<servlet-class>com.yan.session.SessionDemo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessinDemo02</servlet-name>
<url-pattern>/s2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SessinDemo03</servlet-name>
<servlet-class>com.yan.session.SessionDemo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessinDemo03</servlet-name>
<url-pattern>/s3</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>1</session-timeout> <!-- 1分钟后session自动失效-->
</session-config>