SessionID是由服务器的那部分程序生成的? 100

SessionID是由服务器的那部分程序生成的?,请以应用JSP和tomcat的服务器为例详细说明。HttpSessionsession=request.getSessi... SessionID是由服务器的那部分程序生成的?,请以应用JSP和tomcat的服务器为例详细说明。
HttpSession session = request.getSession(true);

javax.servlet.http
Interface HttpSession

javax.servlet.http
Interface HttpServletRequest
getSession(boolean create)
Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session.

求源代码
展开
 我来答
hiyuyang
2014-08-14 · TA获得超过359个赞
知道小有建树答主
回答量:335
采纳率:55%
帮助的人:85.1万
展开全部
Session一般在服务器上设置了一个30分钟的过期时间,当客户停止活动后自动失效。Session 中保存和检索的信息不能是基本数据类型如 int, double等,而必须是java的相应的对象,如Integer, Double.

Httpsession具有如下API:

getId 此方法返回唯一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当作键名用。

GetCreationTime 返回session被创建的时间。最小单位为千分之一秒。为得到一个对打印输出很有用的值,可将此值传给Date constructor 或者GregorianCalendar的方法setTimeInMillis.

GetLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。

GetMaxInactiveInterval 返回总时间(秒),负值表示session永远不会超时。

getAttribute 取一个session相联系的信息。(在jsp1.0中为 getValue)

Integer item = (Integer) session.getAttrobute("item") //检索出session的值并转化为整型

setAttribute 提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue)

session.setAttribute("ItemValue", itemName); // ItemValue 必须不是must简单类型

在应用中使用最多的是getAttribute和setAttribute.现以一个简单的例子来说明session的应用,  test1.jsp(信息写入session),test2.jsp(从session读出信息)。

test1.jsp

<HTML>

<HEAD>

<TITLE> Document </TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">
session.setAttribute("str",new String(“this is test”));
</BODY>

</HTML>
test2.jsp
<HTML>

<HEAD>
<TITLE> New Document </TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">
<%
String ls_str=null;
ls_str=(String)session.getAttribute("str");
out.println(“从session里取出的值为:”+ls_str);
%>
</BODY>

</HTML>
更多追问追答
追问
请看清问题再来回答,谢谢!
追答
已经都告诉答案了  不懂就别提问了
抬走吧丶没救了
推荐于2016-08-09
知道答主
回答量:2
采纳率:0%
帮助的人:2.4万
展开全部
修改TOMCAT 默认的生成SESSION ID的算法和字符长度非常简单,只需修改context.xml中的<Manager>标签值,比如:
<Manager
sessionIdLength="20"
pathname="SESSIONS.ser"
maxActiveSessions="8000"
secureRandomAlgorithm="SHA1PRNG"
secureRandomClass="java.security.SecureRandom"
maxInactiveInterval="60"
/>
标红的部分不用我说大家也应该知道了,算法除了SHA1PRNG还有好几种,具体可以查看 JDK DOC的java.security.SecureRandom类章节.
更多配置见:http://tomcat.apache.org/tomcat-7.0-doc/config/manager.html
TOMCAT默认的SESSIONID生成器在高并发下可能产生些性能损失,因为采用了较为安全的随机数来生成SESSION的ID值。
实际上TOMCAT生成的SESSIONID是不可能有重复值的,查看TOMCAT源码文件:ManagerBase.java中的以下代码
/**
* Generate and return a new session identifier.
*/
protected String generateSessionId() {
String result = null;
do {
if (result != null) {
duplicates++;
}
result = sessionIdGenerator.generateSessionId();
} while (sessions.containsKey(result)); //此处保证最终生成给客户端使用的SESSIONID一定是不重复的
return result;
}
所以,不必担心SESSIONID的安全性,如果有更好的实现,可以修改相应代码用于特定项目中。
因此我们可以修改TOMCAT源码中的SessionIdGenerator.java生成ID的函数部分,比如采用 java.util.UUID+java.util.Random+(随机字符串)来构建更高效的生成SESSIONID的算法,或者自己实现相关部分等 等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
启南
2015-10-26
知道答主
回答量:31
采纳率:0%
帮助的人:10.7万
展开全部

sessionid创建的三种场景

  1. HTTP请求中含有jessionid,那么coyoteAdapter(将coyote.request适配成connector.request)会解析出来,不论是从querystring还是请求体中

  2. 手动创建,就是调用getsession方法

  3. 这是题主忽略的(也是本人想了N久才意识到)。就是jsp转servlet时的九大隐式对象,其中包含session对象,这意味着jsp转servlet时默认会帮我们创建session对象(如果还没创的话),然后就又调用createsession从而调用sessionidgenerator

    附注:如果题主只写一个servlet,然后就往response中写几个文字,那么这种情况下浏览器是拿不到set-cookie:jessionid=xxx的。
    回答完毕。和题主斯比那货我直接无语。。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kivil
推荐于2018-03-13 · TA获得超过169个赞
知道小有建树答主
回答量:148
采纳率:100%
帮助的人:125万
展开全部
你用的是Tomcat的话,则在Tomcat源码中有具体实现。
Tomcat中的实现类有HttpRequestBase 、HttpProcessor 等类的实现。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式