當前位置:首頁 » 雲伺服器 » 伺服器端如何生成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 09:49:24 瀏覽:722
linux編輯文檔 發布:2025-01-13 09:47:51 瀏覽:434
二手製冷壓縮機 發布:2025-01-13 09:43:59 瀏覽:584
網魚電腦密碼多少 發布:2025-01-13 09:33:46 瀏覽:463
如何取消子賬號密碼 發布:2025-01-13 09:22:41 瀏覽:346
抖音搜索有緩存 發布:2025-01-13 09:17:28 瀏覽:589
c語言字元數組連接 發布:2025-01-13 08:55:11 瀏覽:900
國二c語言編程題目 發布:2025-01-13 08:45:41 瀏覽:285
ipad軟體如何加密 發布:2025-01-13 08:28:59 瀏覽:278
android的文件操作 發布:2025-01-13 08:24:48 瀏覽:173