2009-05-28 60 views

回答

28

是。由於會話ID是通過URL(document.location.href)或通過cookie(document.cookie)傳輸的,因此您可以檢查是否存在會話ID。

+1

sarnath'd該死的你:)另外值得一提的一些平臺,可回收,可確定的方式編寫了這一點,以隱藏字段。 – annakata 2009-05-28 12:54:48

3

據我所知,一個瀏覽器會話沒有一個id。

如果你指的是服務器會話,通常存儲在cookie中。例如,ASP.NET存儲的cookie名爲「ASP.NET_SessionId」。

4

你可以通過發出上的document.cookie以下正則表達式接收會話ID:

警報(document.cookie.match(/ PHPSESSID = [^] + /));

在我的例子cookie的名稱來存儲會話ID是PHPSESSID(PHP服務器),只需更換與持有會話ID cookie名稱的PHPSESSID。 (由Web服務器配置)

0

你也許可以通過AJAX ping通內部的JavaScript服務器。 PHP文件可能看起來像:

<?php 
session_start(); 
$id = session_id(); 
echo $id; 
?> 

這將返回當前會話ID。這是你在找什麼。

2

對於PHP的PHPSESSID變量,此功能的工作原理:

function getPHPSessId() { 
    var phpSessionId = document.cookie.match(/PHPSESSID=[A-Za-z0-9]+\;/i); 

    if(phpSessionId == null) 
     return ''; 

    if(typeof(phpSessionId) == 'undefined') 
     return ''; 

    if(phpSessionId.length <= 0) 
     return ''; 

    phpSessionId = phpSessionId[0]; 

    var end = phpSessionId.lastIndexOf(';'); 
    if(end == -1) end = phpSessionId.length; 

    return phpSessionId.substring(10, end); 
} 
4

下可用於檢索JSESSIONID:

function getJSessionId(){ 
    var jsId = document.cookie.match(/JSESSIONID=[^;]+/); 
    if(jsId != null) { 
     if (jsId instanceof Array) 
      jsId = jsId[0].substring(11); 
     else 
      jsId = jsId.substring(11); 
    } 
    return jsId; 
} 
+0

這個正則表達式是否會返回除了一個值之外的任何數組?沒有全局修飾符,所以它只應該返回第一個匹配,否則如果不匹配,這可能是你想要的。 – RTF 2014-08-08 16:49:57

1

這裏有一個簡短而親切的JavaScript函數來獲取會話ID:

function session_id() { 
    return /SESS\w*ID=([^;]+)/i.test(document.cookie) ? RegExp.$1 : false; 
} 

或者,如果你更喜歡一個變量,這裏是一個簡單的一行:

var session_id = /SESS\w*ID=([^;]+)/i.test(document.cookie) ? RegExp.$1 : false; 

應該匹配PHP,JSP,.NET的會話ID cookie,並且我還假設其他各種服務器端處理器。

0

更新2017年

var cookie = new URLSearchParams(document.cookie) 
if(cookie.has("PHPSESSID")){ 
    var sessionID = cookie.get("PHPSESSID") 
}