[英]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.