每个浏览器向服务器发起请求时,服务器都会为该浏览器分配一个唯一的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));
}
}
}