[英]How to Modify Session Variable in JavaScript MVC4 Razor View engine .vbhtml
[英]MVC4 Razor. How to pass a javascript variable to server?
我有一個要傳遞回服務器端的javascript變量,此后我打算將其用作訪問令牌,以授予用戶對需要此令牌的其他頁面的訪問權限。
我想知道如何將這個javascript變量傳遞回服務器,以便將其設置為會話變量? 我需要使用ajax發送回去嗎?
這是jQuery的一部分,我用於從服務器檢索令牌
$(document).ready(function () {
$('#loginForm').submit(function(e) {
var blargh = $(this).find('input').serialize();
$.ajax({
type: 'post',
url: '/WebAPI/api/authenticate/login',
data: blargh,
success: function (data) {
$.each(data, function(index, token) {
$('#container').prepend('<input type="hidden" name="MY_HIDDEN_FIELD_NAME" id="MY_HIDDEN_FIELD_NAME" value="'+token+'">');
});
},
error: function(jqXHR, status, errorThrown) {
alert("Error " + status + "\nError Thrown" + errorThrown )
},
});
e.preventDefault();
});
});
您不能將其作為隱藏的表單元素傳遞回去,還是不能在ajax回發的查詢字符串中傳遞回去?
在global.asmx中獲取回發值的鈎子示例
protected void Session_Start(object src, EventArgs e)
{
if(!string.IsNullOrEmpty(Request.Form["MY_HIDDEN_FIELD_NAME"]))
{
Session["MY_SESSION_NAME"] = Request.Form["MY_HIDDEN_FIELD_NAME"]
}
}
我建議您在發送ajax請求時在請求標頭中向您發送acess令牌
xhr.setRequestHeader('custom-header', 'value');
在服務器端,您可以獲取請求標頭
首先-您的客戶為什么生成令牌(我希望我在那里已經正確理解了您)? 服務器應生成令牌,然后客戶端必須負責維護令牌。
如果它是僅在JavaScript中的瀏覽器中使用的API令牌,那么我建議您使用身份驗證cookie-所有瀏覽器都知道如何處理它們,並且如果您不想再允許,也可以在服務器端輕松使它們過期要訪問的特定令牌(這很重要)。 另外,我強烈建議不要依賴服務器端會話來維護身份驗證會話。
理想情況下,身份驗證令牌應該是無狀態的(就像在Forms Authentication的cookie中一樣)-舉證責任在於客戶端要向您發送正確的令牌,該令牌包含您需要用正確的用戶重新初始化當前請求狀態的信息。
但是,如果它是任何類型的客戶端的通用API,則應允許客戶端至少在所有請求的查詢字符串中向您發送令牌。 您還應該支持在請求標頭中使用它-可以輕松支持設置請求標頭的客戶端通常更喜歡這樣做,因為這樣一來,它會從URL中隱藏auth令牌,並使格式化請求更容易(還有可能最大化Web服務器的查詢字符串限制(如果令牌足夠大)。
然后,我建議您至少查看覆蓋的MVC AuthorizeAttribute
(有2個-“標准” MVC 4管道有一個,新的Web API管道有一個,如果同時使用這兩個,則都需要完成該鏈接是針對MVC 4的),用於破解您的Cookie /標題/查詢字符串值。 您可以在其中獲取值,解密令牌,識別用戶並設置角色。 然后,該屬性的核心代碼包含用於基於用戶是否已通過身份驗證/具有特定角色/是否是特定用戶來拒絕請求的邏輯。
要在AJAX POST中傳回其他項目,您可以像這樣添加它...
var blargh = $(this).find('input').serialize();
blargh.someItem = "value";
請記住,這僅在使用AJAX提交表單時有效,因此在JavaScript不可用或被禁用的情況下無效。
所有正常的安全免責聲明均適用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.