java Session与Coockie的使用

每个浏览器向服务器发起请求时,服务器都会为该浏览器分配一个唯一的JSESSIONID,并把这个id用cookie的形式写回客户端,也就是说,不管你有没有写入cookie,默认都会有一个名为JSESSIONID的cookie。这个cookie可以用来判断请求是否来自同一用户。


接下来我们来演示一下

1.当用户输入用户名和密码并且点击登录后,服务器接受请求,打印出该请求的JSESSIONID和所有cookie,并把获取的用户名和密码写入cookie

2.当用户再次请求时,打印出的cookie如果包含了上次请求的用户名和密码的cookie,则证明写入成功


界面如下


界面html

<form action="/52xyj/servlet/CoockieTest" method="post">
         
          <input type="text" placeholder="用户名" name="uid" />
          <br>
          <input type="password" value="密码" name="psw"  />
           <br>
          <!--   下次自动登录<input type="radio" name="auto_login" value="" alt="login" id="auto_login"/>-->
             <input type="submit" name="login" value="登录" alt="login" id="submit_btn" />
           </form>

接下来在doPost方法中的代码段如下(CookieSessionHelper是公共类,在文章末尾贴了代码)


第一次请求的输出信息如下:



再次请求的输出信息如下:





接下来讨论Session,Session是基于Cookie的,如下图,利用JSESSIONID作为键可以在服务器找到相应的会话信息



如果客户端关闭了coockie ,也可以使用session



接下来我们利用session实现对访问量的统计

1.首次请求,新建计数变量,存入session

2.再次请求,取出变量,+1后存入session

3.第三次请求时删除session

4.第四次请求计数从0开始


相应的代码如下

HttpSession session =request.getSession();
		if(session.isNew())
		{
			System.out.println("第一次请求,正在创建Seesion...");
			session.setAttribute("count", 1);
			session.setMaxInactiveInterval(60*60*24*365);
		}
		else
		{
			int count=(Integer) session.getAttribute("count");
			count++;
			if(count==3)
			{
				System.out.println("删除Session...");
				session.setMaxInactiveInterval(0);
			}
			else
			{
				session.setAttribute("count", count);
				CookieSessionHelper.printSesions(session);
			}
			
		}



请求过程的输出信息如下:





公共类  CookieSessionHelper.java 的代码

package cn.xyj;

import java.util.Enumeration;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CookieSessionHelper 
{
	public static void printCookies(Cookie[] cookies)
	{
		System.out.println("----------------------------------------正在打印Cookies");
		for (int i=0;i<cookies.length;i++)
		{
			System.out.println("----------CookieName="+cookies[i].getName());
			System.out.println("getValue="+cookies[i].getValue());
			System.out.println("getDomain="+cookies[i].getDomain());
			System.out.println("getPath="+cookies[i].getPath());
			System.out.println("getMaxAge="+cookies[i].getMaxAge());
			System.out.println("getComment="+cookies[i].getComment());
			System.out.println("getSecure="+cookies[i].getSecure());
			
		}
		
	}
	public static void addCookies( HttpServletResponse response,Cookie[] cookies)
	{
		System.out.println("----------------------------------------正在写入Cookies");
		for (int i=0;i<cookies.length;i++)
		{
			System.out.println("----------CookieName="+cookies[i].getName());
			response.addCookie(cookies[i]);
		}
		
	}
	public static void printSesions(HttpSession session)
	{
		System.out.println("----------------------------------------正在打印Sessions");
		Enumeration<String>attributeNames=session.getAttributeNames();
		while (attributeNames.hasMoreElements())
		{
			String sessionName=attributeNames.nextElement();
			System.out.println("----------SessionName="+sessionName);
			System.out.println("SessionValue="+session.getValue(sessionName));	
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值