JavaScript如何控制Session實(shí)現(xiàn)原理及代碼
2024-09-01 08:29:07
供稿:網(wǎng)友
看到這個(gè)題目,或許有人會(huì)提出疑問,JavaScript代表客戶端,而Session代表的是服務(wù)器(不知道這樣說大家是否能夠理解)。
先說一下需求,我在做一個(gè)權(quán)限管理的時(shí)候,需要在點(diǎn)擊某個(gè)模塊時(shí),Session中相應(yīng)的改變模塊代號(hào),而實(shí)現(xiàn)這個(gè)操作的是一個(gè)a標(biāo)簽,當(dāng)然我不知道 一個(gè)linkbutton是否可以同時(shí)將跳轉(zhuǎn)頁面和修改Session做了,個(gè)人感覺應(yīng)該是可以的,具體能不能,如果有人做了Demo可以留言說明。
a標(biāo)簽,實(shí)現(xiàn)頁面的跳轉(zhuǎn),他的onclick事件,執(zhí)行的也是本頁面中的js方法,現(xiàn)在就回到了題目所描述的問題——寫一個(gè)JavaScript方法,使其修改Session。
其實(shí)這個(gè)例子不難,但是對(duì)我個(gè)人的意義卻非同尋常,這個(gè)例子解除了我一大部分對(duì)AJAX的恐懼。
首先,是寫一個(gè)一般處理程序(也就是服務(wù)端代碼)
需要說明的是,如果要修改Session,需要額外引入命名空間,和實(shí)現(xiàn)一個(gè)接口(只需實(shí)現(xiàn),別的什么也不用做)
代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
namespace TGB.CJX
{
/// <summary>
/// 修改Session
/// </summary>
public class ModifySession : IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Session["modelID"]=context.Request.QueryString["session"].ToString();
//context.Session["modelID"] = "1";
//context.Response.Write(context.Session["modelID"]);
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
有沒有發(fā)現(xiàn)上面實(shí)現(xiàn)的功能很簡單呢?
下面,是客戶端代碼
代碼如下:
var xmlhttp;
var session;
function submit(obj) {
//session = obj.id.substr(1, 1);
session = obj.id.replace("model","");
//IE7,IE8,FF,MOZILLA,SAFARI
if (window.XMLHttpRequest) {
//alert("IE7,IE8,FF,MOZILLA,SAFARI");
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMinmeType) {
xmlhttp.overrideMinmeType("text/xml");
}
} else if (window.ActiveXObject) {
//alert("IE5,IE6");
var activeName = ["MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP"];
for (var i = 0; i < activeName.length; i++) {
try {
xmlhttp = new ActiveXObject(activeName[i]);
break;
} catch (e) {
return;
}
}
}
if (xmlhttp == undefined || xmlhttp == null) {
alert("當(dāng)前瀏覽器不支持創(chuàng)建XMLHTTPREQUEST對(duì)象,請(qǐng)更換瀏覽器");
return;
}
xmlhttp.onreadystatechange = callback;
xmlhttp.open("GET", "ModifySession.ashx?session=" + session, true);
xmlhttp.send(null);
}
function callback() {
//判斷和服務(wù)器的交互是否完成,還要判斷服務(wù)器端是否返回了數(shù)據(jù)
if (xmlhttp.readyState == 4) {