cookie和Jsessionid

1.session的实现方式

web开发的同学都知道,http是无状态的会话协议,也就是说无法保存用户的信息。那如果有一些信息需要在用户的浏览活动中一直保持,该怎么做呢?我 们可以把这些信息在每次请求的时候作为参数传递给服务器,但这样做既麻烦又耗费资源,这时候就体现出了session的重要性。sessionweb开 发中不可或缺的一个特性。它是对于一个特定的用户请求,在web服务器上保存的一个全局变量。有了它我们就可以把用户的一些信息保存在服务器上,而不用在 服务器和客户端之间来回传递。知道了session的作用,那session是怎么实现的呢?服务器上为每个用户都保存了一个session,那当用户请 求过来的时候是怎么知道某一个用户应该对应哪个session呢?这时jsessionid就派上用场了。每一个session都有一个id来作为标识, 这个id会传到客户端,每次客户端请求都会把这个id传到服务器,服务器根据id来匹配这次请求应该使用哪个session

jsessionid就是客户端用来保存sessionid的变量,主要是针对j2ee实现的web容器,没有研究过其他语言是用什么变量来保存的。一般 对于web应用来说,客户端变量都会保存在cookie中,jsessionid也不例外。不过与一般的cookie变量不同,jsessionid是保 存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的 时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到cookie里面。

2.jsessionid的作用

在以上的文字中我们了解了session的实现原理,同时也知道了sessionjsessionid紧密不可分割的联系。只有通过jsessionid才能使session机制起作用,而jsessionid又是通过cookie来保存。

3.java代码提取jsessionid

package testcase;

 

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

 

import org.apache.commons.httpclient.Cookie;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpException;

import org.apache.commons.httpclient.HttpMethodBase;

import org.apache.commons.httpclient.methods.GetMethod;

 

public class TestCookie {

public static void main(String args[]) throws HttpException, IOException{

String username = "[email protected]";

String password = "123abc";

Map<String, String> cookieMap = new HashMap<String, String>();

cookieMap = new HashMap<String, String>();

String url = "http://caipiao.163.com/epayAccountInfo.html?cache=1399537161287";

GetMethod method = new GetMethod(url);

HttpClient client = new HttpClient();

client.executeMethod(method);

System.out.println(client.getState());

System.out.println(client.getState().getCookies());

Cookie[] cookies = client.getState().getCookies();

System.out.println(cookies);

System.out.println(cookies);

for (Cookie cookie : cookies) {

cookieMap.put(cookie.getName(), cookie.getValue());

System.out.println(cookie.getName());

System.out.println(cookie.getValue());

}

System.out.println("haha"+cookieMap);

String cookie = "";

for (Entry<String, String> entry : cookieMap.entrySet()) {

cookie += entry.getKey() + "=" + entry.getValue() + "; ";

}

System.out.println(cookie);

}

}

执行结果:

[ |  | JSESSIONID=abcNxKRi0teFM67gPh1zu]

[Lorg.apache.commons.httpclient.Cookie;@470e2030

[Lorg.apache.commons.httpclient.Cookie;@3fb4f649

[Lorg.apache.commons.httpclient.Cookie;@3fb4f649

JSESSIONID

abcNxKRi0teFM67gPh1zu

haha{JSESSIONID=abcNxKRi0teFM67gPh1zu}

JSESSIONID=abcNxKRi0teFM67gPh1zu;

你可能感兴趣的:(cookie和Jsessionid)