導航:首頁 > 配伺服器 > 如何獲得伺服器session

如何獲得伺服器session

發布時間:2022-10-07 23:56:03

A. js怎麼獲得伺服器端的session id

這個id不就是session的id嗎?如果你要用js去獲取,那得用ajax的方式去獲取吧。session.getId()方法就是它的值

B. 如何通過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");

C. 如在html頁面中獲取伺服器session的值

如果你是只想得到地址欄傳過來的參數 可以直接在前台用JS獲取:var url=window.location.search
然後去分割截取把每個參數取出來
如果你真的只想得到session的話只有在後台得到了 前台是沒辦法可去的 你可以定義一個全局變數在後台把session的值賦給全局變數 然後再前台用這個變數得值

D. 調用介面怎麼獲得session

首先在後台把user放入session里,並且也加了一個user的欄位type(int類型,1-管理員/0-企業用戶/2-一般用戶),即user-type對象在session里。 一般我們獲取對象,直接使用jstl標簽里的。


Session:在計算機中,尤其是在網路應用中,稱為「會話控制」。Session對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變數將不會丟失,而是在整個用戶會話中一直存在下去。

當用戶請求來自應用程序的 Web頁時,如果該用戶還沒有會話,則Web伺服器將自動創建一個 Session對象。當會話過期或被放棄後,伺服器將終止該會話。

Session 對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在Session對象中。有關使用Session 對象的詳細信息,請參閱「ASP應用程序」部分的「管理會話」。注意會話狀態僅在支持cookie的瀏覽器中保留。

以上內容參考:網路-session

E. 如何獲得伺服器所有的session

一定可以的。只要你的伺服器沒關。那麼就可以獲得在線的人數。(一人對應一個session)。沒錯的。我以前就做了一個在線聊天系統。用到了這個。 追問: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="java.net.InetAddress"%><%List<HttpSession> l=new ArrayList<HttpSession>();
if(application.getAttribute("s1")==null)
application.setAttribute("sl",l);else{l=( List<HttpSession> )application.getAttribute("sl");}session.setAttribute("u","遊客");
l.add(session);
for(int i=0;i<l.size();i++){
if(l.get(i)==null){
l.remove(i);}}application.setAttribute("sl",l);
%>我這樣寫的 判斷以前的session是否為空 為空就清除掉 回答: 是的。思路差不多就是這樣的,不過。你那個判斷session是否為空的可以不必要,。因為session既然在集合中。那麼它就一定不為空。 追問: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="java.net.InetAddress"%><%List<HttpSession> l = new ArrayList<HttpSession>();
if (application.getAttribute("sl") == null)
application.setAttribute("sl", l);else {l = (List<HttpSession>) application.getAttribute("sl");}session.setAttribute("u", "遊客"); boolean x = false;
for (int i = 0; i < l.size(); i++) { if (l.get(i) == null) {
l.remove(i);} }for (int i = 0; i < l.size(); i++) { if (l.get(i).equals(session)) {x = true;break;} }if (x == false) {

F. 如何通過HttpPost從伺服器上獲得一個sessionid

java'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過期也做下測試。

G. js怎麼獲得伺服器端的session id

這種只能夠再後台伺服器代碼裡面設置一個方法,在前端Ajax請求的時候,進行返回sessionId信息了。因為不知道具體的語言所以所得比較籠統(比如:Java的話可能會說再action層寫一個AJAX處理的方法;PHP不是很好說一般是controller層中寫)

H. 本地vb程序如何讀取本地伺服器的session

建議你用ASP的Application 對象來做。

他裡面有現成的監視事件

Application_OnEnd:當所有用戶的 session 都結束,並且應用程序結束時,此事件發生。

Application_OnStart:在首個新的 session 被創建之前(這時 Application 對象被首次引用),此事件會發生。


Application_OnStart 事件

Application_OnStart 事件發生在第一個新的會話創建之前 (當 Application 對象第一次被引用時)。

此事件放置在 Global.asa 文件中。

注釋:在 Application_OnStart 事件腳本中引用 Session、Request 或者 Response 對象會引發錯誤。

Application_OnEnd 事件

Application_OnEnd 事件發生在應用程序結束時 (當 web 伺服器停止運行時)。

此事件放置在 Global.asa 文件中。

注釋:MapPath 方法無法用於 Application_OnEnd 代碼中。



語法

<scriptlanguage="vbscript"runat="server">
SubApplication_OnStart
...
EndSub
SubApplication_OnEnd
...
EndSub
</script>

實例

Global.asa:

<scriptlanguage="vbscript"runat="server">
SubApplication_OnEnd()
Application("totvisitors")=Application("visitors")
EndSub

SubApplication_OnStart
Application("visitors")=0
EndSub

SubSession_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
EndSub

SubSession_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
EndSub
</script>

在 ASP 文件中顯示當前訪問者的數目:

<html>
<head>
</head>
<body>
<p>
Thereare<%response.write(Application("visitors"))%>
onlinenow!
</p>
</body>
</html>

I. 如何在服務端獲取session中的值

你可以在伺服器打開一個用戶會話時為該用戶建立session以用來保存一些用戶的基本信息,或是其它的設置方面的信息,session用起來是非常方便的,但同時需要注意的是,每建立一個session變數,伺服器是要為之分配相應的內存空間的,並且它的釋放是有時間限制的!

J. 在express搭建的伺服器裡面怎麼設置並獲取session

這里看你怎麼存放用戶信息了:

express-session

在瀏覽器 A 上登陸用戶 ua ,分配 sid1, 這時你需要將這個 sid1 與你的登陸的用戶相關聯, 暫時關系假設為

sid1 uida

現在瀏覽器B上登陸用戶 ua, 這個時候又分配了 sid2, 所以你需要查找你存放的對應關系, 並更新

sid2 uida

這樣如果瀏覽器A再訪問你的網站, 這時你需要檢查對應關系來判斷是否已經登陸

個人理解, 沒有驗證. 推薦使用 redis 來存放對應關系, 這時有2個關系:

key | value
sid | userinfo
uid | sid
訪問伺服器, 先檢查 sid 得到 uid, 然後根據 uid 來得到正確的 sid, 比較2個sid

閱讀全文

與如何獲得伺服器session相關的資料

熱點內容
pdfplus 瀏覽:577
匯編O命令 瀏覽:970
plt轉pdf 瀏覽:364
魔獸60宏命令大全 瀏覽:478
php志願者網站源碼 瀏覽:874
貿易pdf 瀏覽:497
dbug命令 瀏覽:351
開逛app如何加好友 瀏覽:960
ftpdos命令下載文件 瀏覽:75
華為如何打開語音伺服器 瀏覽:243
python中的idle 瀏覽:1000
五軸聯動數控編程 瀏覽:965
換一台電腦如何遠程雲伺服器 瀏覽:133
阿里雲怎麼買雲伺服器 瀏覽:665
java提取文字 瀏覽:97
阿里雲伺服器同人賬號問題 瀏覽:421
5分鍾解壓軸題 瀏覽:341
安卓桌面二級文件夾 瀏覽:188
eps文檔加密 瀏覽:261
手機怎麼做pdf 瀏覽:162