当前位置:首页 » 云服务器 » 服务器端如何生成sessionid

服务器端如何生成sessionid

发布时间: 2022-04-23 07:22:30

① 什么是sessionid

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID.

② sessionID是怎么在客户端和服务器端传递的

session的工作原理如下,即为sessionid在客户端和浏览器端的交互:
当浏览器A去访问一个有打开了session机制的php1文件时,session文件会创建,同时会将该session文件的id以cookie的形式
发送给浏览器(session文件的id号可以session_id()这个函数来获得)。当浏览器A没有关闭(会话没有结束),反而去访问另一个也开启
session机制的php2文件时,那么该sessionid也会跟着http协议从浏览器发送到服务器上,访问到之前创建的session文件,将相
关内存也保存到该session文件内。

当我们开启了另一个浏览器B,也就是创建了另一个会话,那么该浏览器访问一个带有开启session机制的网页,会另外生成一个新的session文件,并将该session文件id号以cookie的形式传递给浏览器B.

可以这么理解,一个会话对应一个sessionid。

③ php session是怎样生成的

session是在服务器端保持用户会话数据的一种方法,对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,最早,Netscape将cookie引入浏览器,使得数据可以客户端跨页面交换,那么服务器是如何记住众多用户的会话数据呢?
首先要将客户端和服务器端建立一一联系,每个客户端都得有一个唯一标识,这样服务器才能识别出来。建议唯一标识的方法有两种:cookie或者通过GET方式指定。默认配置的PHP使用session的时会建立一个名叫”PHPSESSID”的cookie(可以通过php.ini修改session.name值指定),如果客户端禁用cookie,你也可以指定通过GET方式把session id传到服务器(修改php.ini中session.use_trans_sid等参数)。
我们查看服务器端session.save_path目录会发现很多类似sess_vv9lpgf0nmkurgvkba1vbvj915这样的文件,这个其实就是session id “vv9lpgf0nmkurgvkba1vbvj915″对应的数据。真相就在这里,客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入。
事实就是这样,所以如果服务器不支持session或者你想自定义session,完全可以DIY,通过PHP的uniqid生成永不重复的session id,然后找个地方存储session的内容即可,你也可以学flickr把session存储在MySQL数据库中。

④ Session ID是什么意思

SessionID存放在服务器内存和客户机的Cookie里面。当用户发出请求时,服务器将用户Cookie里面记录的SessionID和服务器内存中的SessionID进行比对,从而找到这个用户对应的Session进行操作。

1.Session用来追踪每个用户的会话,使用服务器生成的SessionID进行标识,用以区分用户。Session存放在服务器的内存中,SessionID存放在服务器内存和客户机的Cookie里面。

2.在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。

3.当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

4.如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,会话状态仅在支持 cookie 的浏览器中保留。

5.当用户发出请求时,服务器将用户Cookie里面记录的SessionID和服务器内存中的SessionID进行比对,从而找到这个用户对应的Session进行操作。

⑤ session的ID是怎么得出的

session的ID是由服务器随机生成长整型

⑥ sessionId的生成机制是什么

跟IP和端口这些无关吧,应该跟客户端,浏览器这些有关。当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。关闭此浏览器窗口,其内存中的sessionId也就随之销毁。重新请求时,会重新生成一个sessionId给客户端浏览器,并存在浏览内存中。

SessionID 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionID 来计算现有会话的 SessionID。

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

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>

⑧ httpsession中的SessionID是如何生成的

//excel.java

package net.oicp.jing31;

import java.io.File;

import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSession;
public class excel implements HttpSessionListener
{
public void sessionCreated(HttpSessionEvent se)
{
}
public void sessionDestroyed(HttpSessionEvent se)
{
System.out.println("The session has been destoryed!!");
}
}
如何获得?

如何在JSP工程中填加自己的listener
我把web.xml文件里添加如下内容:
<listener>
<listener-class>net.oicp.jing31.excel</listener-class>
</listener>
public void sessionDestroyed(HttpSessionEvent se)
{
System.out.println("sessionid:\t"+se.getSession().getId());
}

⑨ 如何通过HttpPost从服务器上获得一个sessionid

ava's Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.
如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Client端实现SOAPHandler,然后在public boolean handleMessage(SOAPMessageContext context)方法中处理response的cookie,利用正则表达式获取JSESSIONID的值。
因为handleMessage每次都会首先执行,不管是request还是response过程,所以我只谈谈第一种方法,顺便对session过期也做下测试。以下是Demo及说明:
(一)创建Server类

public class HelloServer {
private String sessionid;
public WebServiceContext wsContext;
public String onLogin(){
return null;
}
public String sayHello(String sessionid) {
return null;
}
}
(二)使用MyEclipse工具生成Delegate类

@javax.jws.WebService(targetNamespace = "http://ws.jax_ws.honwhy.com/", serviceName = "HelloServerService", portName = "HelloServerPort", wsdlLocation = "WEB-INF/wsdl/HelloServerService.wsdl")
public class HelloServerDelegate {
HelloServer helloServer = new HelloServer();
public String onLogin() {
return helloServer.onLogin();
}

public String sayHello(String sessionid) {
return helloServer.sayHello(sessionid);
}

}
利用MyEclipse工具生成了Delegate类之外,还生成了sun-jaxws.xml和wsdl路径下的HelloServerService_schema1.xsd和HelloServerService.wsdl文件。
(三)简单修改Delegate类和Server类,加入session部分代码
查看sun-jaxws.xml文件就可以知道HelloServerPort是由HelloServerDelegate类实现的,而在Delegate类中只是new了一个HelloServer对象,然后调用相应方法实现onLogin和sayHello的。参考网上“Web Service管理session”相关的文章,我们可以在HelloServer中加入相关代码获取session,不过本文的建议是在Delegate类中注入@Resource而不是在Server类中注入,不修改sun-jaxws.xml在Server中注入是不会成功的。
参考代码:

public class HelloServerDelegate {
@Resource
private WebServiceContext wsContext;
HelloServer helloServer = new HelloServer();
public String onLogin() {
helloServer.wsContext = this.wsContext;
return helloServer.onLogin();
}

public String sayHello(String sessionid) {
return helloServer.sayHello(sessionid);
}

}
要将wsContext传递给HelloServer,就必须在HelloServer类中新建一个WebServiceContext类型的成员变量,为了方便本文把它设置为public域的变量,且看Server类新增的代码:

public WebServiceContext wsContext;
public String onLogin(){
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
if (session == null) {
throw new WebServiceException("No session in WebServiceContext");
}
sessionid = session.getId().toString();
return sessionid;
}
(四)设置session过期时间
设置session过期有两种方式可以选择,一种是在sessionid返回之前设置当前session的有效期,使用setMaxInactiveInterval方法,提供int类型的参数,单位是秒。另外一种是在web.xml中加入session-config标签,单位是分钟。

<session-config>
<session-timeout>1</session-timeout>
</session-config>
(五)在sayHello方法中加入必要的逻辑
从Client发起请求首先调用的onLogin,然后才是sayHello,从onLogin调用获得的sessionid作为调用sayHello的参数。

public String sayHello(String sessionid) {
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
if (session == null) {
throw new WebServiceException("No session in WebServiceContext");
}
if(sessionid.equals(session.getId().toString())) {
System.out.println(“Hello!”);
return “OK”;
} else {
return “EXPIRED”;
}
}
(六)创建Client工程,使用工具生成Web Service需要的类
在创建Client工程前可以将Server工程运行起来,从Server工程的HelloServerService.wsdl文件中找到,这个地址会在接下来使用得到。
在Client工程中新建一个Web Service Client,填入刚才的地址加入”?WSDL”,生成Web Service所需的类。
(七)创建Client类用来发起请求与Server通信

public class HelloClient {
private static String sessionid;
public static void main(String[] args) {
HelloServerService service = new HelloServerService();
HelloServerDelegate port = service.getHelloServerPort();
// 设置保留session
((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
// 第一次调用onLogin获得sessionid
sessionid = port.onLogin();
while(true){
try {
// 休息超过session有效期
Thread.sleep(65000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String result = port.sayHello(sessionid);
if(result.equals("OK")){
System.out.println("session is"+result);
} else {
System.out.println("session is"+result);
break;
}
}// end of while loop
System.out.println("HelloClient::end of while loop");

⑩ js怎么获得服务器端的session id

这种只能够再后台服务器代码里面设置一个方法,在前端Ajax请求的时候,进行返回sessionId信息了。因为不知道具体的语言所以所得比较笼统(比如:Java的话可能会说再action层写一个AJAX处理的方法;PHP不是很好说一般是controller层中写)

热点内容
天猫上传 发布:2025-01-13 06:06:35 浏览:156
php处理并发 发布:2025-01-13 06:03:44 浏览:282
安卓传文件的软件哪个最好 发布:2025-01-13 06:03:07 浏览:885
电脑服务器可以做吗 发布:2025-01-13 05:59:49 浏览:846
前端配置代理的时候怎么看端口 发布:2025-01-13 05:57:25 浏览:910
同桌的你文学脚本 发布:2025-01-13 05:42:12 浏览:746
32位加密算法 发布:2025-01-13 05:39:48 浏览:310
脚本写入软件 发布:2025-01-13 05:36:49 浏览:63
快手自动算法 发布:2025-01-13 05:28:41 浏览:120
python的interpreter 发布:2025-01-13 05:27:56 浏览:150