管理员必须重新加载页面才能看到管理员功能(关于cookie位置的问题)

时间:2010-07-27 16:15:40

标签: c# asp.net authentication cookies login

我正在创建一个自定义cookie,并重载了Iprincipal类和所有好东西。我的cookie工作正常,我能够成功检索用户的角色,但管理员必须在登录后重新加载默认页面才能看到仅管理员按钮。一旦他们访问我网站上的新页面并返回默认页面,该按钮就在那里。

我在某处读到过最后创建cookie并且与HTTP响应有关。 TBH,我是这些东西的新手,并不清楚究竟是如何工作的,但我看到它如何影响我的程序。

我目前正在默认页面的页面加载中创建和种植我的cookie。我应该在其他地方这样做,也许是在登录页面?我尝试过,但同样的问题仍然存在。我错过了什么吗?

感谢您的帮助,我非常乐意澄清任何事情。

3 个答案:

答案 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,因为需要重新加载。

  1. 我可以强制将具有不同随机字符的http重新加载作为GET参数,但这很丑陋(因为带有GET参数的重新加载的页面将被索引,并产生不必要的复杂性)

    < / li>
  2. 在登录页面上,我希望已经根据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(如果有)。