JavaWeb基础(学习笔记)之cookie、session、application

1.cookie
  • cookie存储在哪里?
    cookie临时以文件的形式将数据存储在用户的计算机上,存储方式是key-value,存储在浏览器的temp文件夹
  • 解决中文乱码问题
    URLEncoder或URLDecoder将字符串以指定的字符集进行编码或解码
String cu_name_utf8 = URLEncoder.encode(cu_name, "utf-8");//编码
cu_name=URLDecoder.decode(cu_name_utf8,"utf-8");

编写cookie小案例:登录成功后保存,关闭浏览器再次打开保存用户名
注意:保存cookie是浏览器的动作,如果放在跳转之后,代码是执行的 ,但是浏览器已经跳转了,就无法保存
核心代码:

			//当你的用户名和密码判断正确时,将用户名保存至cookie			
			String cu_name_utf8 = URLEncoder.encode(cu_name, "utf-8");
			Cookie cookie = new Cookie("cu_name",cu_name_utf8);	//new Cookie(String ket,String value)
			
			//单位是秒,是cookie保存的最大时间,时间到了,浏览器自动清除
			cookie.setMaxAge(60);	
			response.addCookie(cookie);
	
			
			//如果查到的值大于0则,登录成功,跳转到welcome.jsp页面
			request.getRequestDispatcher("welcome.jsp").forward(request, response);
//读取cookie并赋值给cu_name
	String cu_name="";
	//获取浏览器中所有的cookie,如果没有 返回null
	Cookie[] cookies = request.getCookies();
	if(cookies!=null && cookies.length>0){
		for(Cookie c:cookies){
			if("cu_name".equals(c.getName())){
				String cu_name_utf8 =c.getValue();
				cu_name=URLDecoder.decode(cu_name_utf8,"utf-8");
			}
		}
	}

清除cookie:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//实现登出功能	清除cookie后跳转至主页
	Cookie cookie = new Cookie("cu_name","");
	cookie.setMaxAge(0);
	response.addCookie(cookie);
	response.sendRedirect("/web03_0904");
%>
2.session
  • session:一个会话就是浏览器与服务器之间的一次通话。
  • 重新打开浏览器或不同的浏览器,算一次新的会话
  • sessionid:在服务器接收到第一次的请求的时候,就建立新的会话。服务器就会为这次会话创建一个整个服务器都唯一的sessionid
  • 关闭浏览器后重新打开浏览器获取不到以前的session中的内容,sessionid变了;因此,浏览器既得不到其他浏览器会话的数据,也得不到上一次浏览器会话的数据。
    session的使用
    可以使用session来保存用户名称,即可以解决中文的问题,还有一个非常重要的特点
    session的value可以存Object

    方法:session.setAttribute(String, Object);
session.setAttribute("cu_name", cu_name);
session.getAttribute("cu_name");
session会话的清除和过期

(1)若没有清理机制,会导致性能问题或服务器崩溃

  • 程序主动清除session数据
  • 服务器主动清除长时间没有再次发出请求的session
    (2)程序主动清除session数据
  • 设置会话失效:session.invalidate();
  • 移除会话的一个属性
public void removeAttribute(String name);
用法:session.removeAttribute("userName");

(3)服务器主动清除长时间(默认30分钟)没有再次发出请求的session
设置会话过期时间:

方法一:public void setMaxInactiveInterval(int interval);
方法二:<session-config>
	<session-timeout>30</session-timeout>
</session-config>
3.application

application:作用于真个服务器的存储数据的地方,一般不到万不得已不用。
小案例:application实现计数器

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import = "java.util.Random" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<%
	int count=100000;
	if(application.getAttribute("count")==null){
		application.setAttribute("count", 100000);
	}else{
		int c =(int)application.getAttribute("count");
		c+=new Random().nextInt(10000);
		count=c;
		application.setAttribute("count", count);
	}
%>
<h1>欢迎您!你是我们网站的第<%=count %>个访问者</h1>
</body>
</html>

在谷歌浏览器中打开页面后
再再ie浏览器中打开实现计数的实现
实现结果

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值