首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >许多用户的Padarn会话

许多用户的Padarn会话
EN

Stack Overflow用户
提问于 2014-04-30 17:39:48
回答 2查看 148关注 0票数 1

我正在为我的项目评估帕达林,并试图实现一个非常简单的身份验证方案:

代码语言:javascript
复制
namespace SampleSite
{
    public class Login : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Form["login"] == "admin" && Request.Form["password"] == "123")
            {
                Session["username"] = "admin";
                Response.Redirect("PostFiles.html");
            }
            else
            {
                Response.Redirect("Default.aspx");
            }
        }
    }
}

但是,当我的朋友在我调试时试图点击页面时,它对单个用户运行良好,这时会抛出一个NullReferenceException

代码语言:javascript
复制
Session["username"] = "admin";

然后我们意识到它不适用于并发用户。

是否真的不支持并发会话?这是我遗漏的配置吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 14:32:49

事实证明,没有什么好的理由,手握的实验室有一个为cookie设置的域集。更糟糕的是,这个领域是毫无意义的。这可能是我们在内部进行的某种测试的残余,从未恢复到发布。

正在发生的情况是,配置中包含了以下内容:

代码语言:javascript
复制
<Cookies Domain="169.0.0.2" />

这会导致会话cookie从任何客户端被剥离(除非它的IP恰好是169.0.0.2)。

这反过来又会在每个浏览器请求中生成一个新会话,从而有效地抛出会话变量。

将您的web.config更改为没有像这样的cookie域,一切都会好的:

代码语言:javascript
复制
<Cookies />

在您的NullReferenceException代码中获得的Page是因为null页面上的Session对象。当达到服务的最大会话数(当每个请求生成一个新会话时都会快速发生),就会发生这种情况。

票数 0
EN

Stack Overflow用户

发布于 2014-05-02 03:42:55

肯定支持多个会话。默认情况下,支持10个并发会话。

我把这个快速验证测试页面放在一起:

代码语言:javascript
复制
class SessionTest : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var newVariable = Request.Form["value"];

        if (newVariable != null)
        {
            Session["TestVariable"] = newVariable;
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        var sessionVariable = Session["TestVariable"];

        writer
            .Html()
                .Body()
                    .Form(t => t
                        [HtmlTextWriterAttribute.Id, "Test"]
                        ["method", "POST"])

                        .Text(string.Format("CurrentValue: {0}", sessionVariable ?? "[null]"))
                        .Br()
                        .Input(t => t
                                [HtmlTextWriterAttribute.Type, "text"]
                                [HtmlTextWriterAttribute.Name, "value"]
                                [HtmlTextWriterAttribute.Maxlength, "32"])
                        .EndTag() // input
                        .Br()
                        .SubmitButton("Submit", "Submit")
                    .EndTag() // form
                    .Form(t => t
                        [HtmlTextWriterAttribute.Id, "Reload"]
                        ["method", "POST"])
                        .SubmitButton("Reload", "Reload")
                    .EndTag() // form
                .EndTag() // body
            .EndTag(); // html                
    }
}

它只显示当前会话的一个变量,并允许您更改它。我打开了两个浏览器,一个是IE浏览器,另一个是Chrome浏览器,这会产生两个会话,就像两台PC一样。然后,我从两个浏览器点击页面,它们显示了与预期不同的保存会话状态:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23394657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档