我正在创建一个自定义cookie,并重载了Iprincipal类和所有好东西。我的cookie工作正常,我能够成功检索用户的角色,但管理员必须在登录后重新加载默认页面才能看到仅管理员按钮。一旦他们访问我网站上的新页面并返回默认页面,该按钮就在那里。
我在某处读到过最后创建cookie并且与HTTP响应有关。 TBH,我是这些东西的新手,并不清楚究竟是如何工作的,但我看到它如何影响我的程序。
我目前正在默认页面的页面加载中创建和种植我的cookie。我应该在其他地方这样做,也许是在登录页面?我尝试过,但同样的问题仍然存在。我错过了什么吗?
感谢您的帮助,我非常乐意澄清任何事情。
答案 0 :(得分:2)
您可以尝试设置Cookie并重定向。这是登录期间的一些标准做法。重定向将导致新的页面加载,在此期间您的cookie将被发送到服务器。
答案 1 :(得分:1)
当我启动ASP.NET时,我经常遇到类似的问题。问题是我没有在按钮点击发生后正确绑定数据:
错误代码:
void Page_Load(object o, EventArgs e)
{
_adminControls.Visibile = IsAdmin();
}
void Login_Clicked(object o, EventArgs e)
{
DoLogin();
}
解决问题的方法是:
void Page_Load(object o, EventArgs e)
{
// Move binding code, etc to a BindData function and only call it if !IsPostBack
if (!IsPostBack)
{
BindData();
}
}
void BindData()
{
_adminControls.Visibile = IsAdmin();
}
void Login_Clicked(object o, EventArgs e)
{
DoLogin();
BindData(); // Call BindData function after login
}
这可能不是你所看到的,但症状是相似的。
答案 2 :(得分:1)
通过后续的HTTP响应,服务器设置并读取Cookie。
您可以尝试将iframe或其他发送它的内容嵌入同一页面。
这就是我所做的,例如: 1.我让页面用户直接登陆。 Cookies已设置。但是对于此页面,服务器无法读取Cookie,因为需要重新加载。
我可以强制将具有不同随机字符的http重新加载作为GET参数,但这很丑陋(因为带有GET参数的重新加载的页面将被索引,并产生不必要的复杂性)
< / li>在登录页面上,我希望已经根据Cookie的设置显示内容(或者如果没有cookie,则显示其他内容)
//in the head tags:
$(document).ready(function(){
$("#my_div").load("/MYajax/footer_links.html", function(responseTxt, statusTxt, xhr){
if(statusTxt == "success")
console.log("my_div loaded successfully!");
if(statusTxt == "error")
console.log ("my_div Error: " + xhr.status + ": " + xhr.statusText);
});
});
然后在页面中的某处:
<div id="my_div"></mydiv>
在/path/myfile.html中使用存在或不存在的cookie进行任何操作
基本上通过jquery加载,有一个新的http请求发送到/path/myfile.html,并且读取cookie(如果有)。