C#-WebForm-Session、Cookie-登录验证(未登录跳至登录界面)、隐藏地址栏传值

Post 传值(看不见的传值) Get 传值(看得见的传值)

Session - 全局变量组

存放位置:服务端

作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 —— object类型

格式:

  web1 后台代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按钮点击事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        Session["un"] = s;
    }
}

Session 是个一个object类型的“组”,可以放任何东西,string、int、数组等等

使用时先进行判断Session是否是Null,不为空时进行赋值(李献策lxc)

  web2 后台代码:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["un"] != null)
        {
            Label1.Text = Session["un"].ToString();
        }
    }
}

优点:安全、方便、全局访问无限制

劣势:消耗服务器内存资源(每一个用户是一条独立的通道,每一条通道有若干的Session,如果同时很多人访问,那么会造成服务器崩溃)

生命周期:20分钟

  网页打开时会打开一个新的Session,此Session会存在20分钟,结束时自动清空,如果Session重新读取时将重新计时

  当关闭网页时,Session是不会取消的,仍然在倒计时;再重新打开网页时,会打开新的Session,旧的Session仍在后台计时

注意:1、不要大量数据在Session里,尽量不要放集合

     2、临时Session取完无用后记得清空(李献策lxc)

 

Cookie - “全局变量组”

存放位置:客户端电脑硬盘上

作用:保存数据信息,只能保存字符串,全局访问 —— string类型

赋值:response  取值:request  判断时不用value

格式:  

  web1 后台代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按钮点击事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        Response.Cookies["un"].Value = s;
    }
}

Cookies 是一个String类型的“组”,只能存放字符串类型,以文本文档字符串类型存放在客户端某个地方

使用时先进行判断Cookies是否是Null,不为空时进行赋值(李献策lxc)

  web2 后台代码:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"]!=null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }
    }
}

优点:不消耗服务器资源、全局访问、只能保存字符串

劣势:消耗电脑资源、不安全(Cookie会被抓取)、不可靠(用户随时可以删除)

  注意:不要用Cookie保存密码(登录成功后才会将用户名赋值给Cookie)

分类:会话Cookie 与 持久Cookie

生命周期:

  1、会话Cookie - 20分钟

  网页打开时会打开一个新的Cookie,此Cookie会存在20分钟,结束时自动清空,如果Cookie重新读取时将重新计时

  删除办法:

    (1)浏览器一关,此次访问已中断

    (2)没有任何新的提交,20分钟后过期

    (3)手动清除浏览器Cookie

  2、持久Cookie - 可以设置时间

  删除办法:(李献策lxc)

    (1)代码设置过期

    (2)手动清除浏览器Cookie

 

持久Cookie如何制作?

  前台界面 - 当复选框被选中时,保持持久Cookie:

  后台代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按钮点击事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        if (s == "adimn" && TextBox2.Text == "1234")
        {
            Response.Cookies["un"].Value = s;
            //被选中时设置[持久Cookie]时间
            if (CheckBox1.Checked)
            {
                Response.Cookies["un"].Expires = DateTime.Now.AddDays(3);
            }

            Response.Redirect("Default2.aspx");
        }
    }
}

如何删除持久cookie?

  后台代码:

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"]!=null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }

        Button1.Click += Button1_Click;
    }
    //点击按钮清除Cookie并退回登录界面
    void Button1_Click(object sender, EventArgs e)
    {
        Response.Cookies["un"].Expires = DateTime.Now.AddDays(-10);
        Response.Redirect("Default.aspx");
    }
}

 

扩展一:

没有登录是无法跳至主页面的 - 登录验证 - 不放入 IsPostBack 中

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["un"] != null)
        {
            Label1.Text = Request.Cookies["un"].Value;
        }
        //登录验证:如果未登录跳至登录页面
        else
        {
            Response.Redirect("Default.aspx");
        }

        Button1.Click += Button1_Click;
    }
    //点击按钮清除Cookie并退回登录界面
    void Button1_Click(object sender, EventArgs e)
    {
        Response.Cookies["un"].Expires = DateTime.Now.AddDays(-10);
        Response.Redirect("Default.aspx");
    }
}

 

扩展二:

跳转至主页面后,地址栏仍然显示的是登录界面的地址

特点:用地址栏传值,但不会在地址栏中显示传值的内容(李献策lxc)

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Click += Button1_Click;
    }
    //按钮点击事件
    void Button1_Click(object sender, EventArgs e)
    {
        string s = TextBox1.Text;
        if (s == "adimn" && TextBox2.Text == "1234")
        {
            Response.Cookies["un"].Value = s;
            
            //Response.Redirect("Default2.aspx");
            Server.Transfer("Default2.aspx");
        }
    }
}

 

转载于:https://www.cnblogs.com/qq450867541/p/6246564.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当用户关闭浏览器时,无法直接触发服务器端的代码来移除用户信息。但是我们可以利用 Session 的过期时间来间接达到用户退出的效果。 首先,在用户登录成功后,将用户信息存储到 Dictionary 中,并将该用户的 Session ID 作为键。然后,通过将该键值对存储到 Session 中,以便在后续的请求中进行验证。 在 WebForm2.aspx 的 Page_Load 方法中,判断 Session 是否存在该键,如果存在,则表示用户已登录。如果不存在,则表示用户登录或已退出,可以执行相关操作。 下面是一个简单的示例代码: ```csharp // WebForm2.aspx.cs protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["LoggedInUser"] != null) { // 用户已登录 string sessionId = Session.SessionID; Dictionary<string, string> userDictionary = (Dictionary<string, string>)Application["UserDictionary"]; if (userDictionary.ContainsKey(sessionId)) { // 执行退出登录操作 string username = userDictionary[sessionId]; userDictionary.Remove(sessionId); // 其他清理操作... // 重定向到登录面或其他面 Response.Redirect("WebForm1.aspx"); } } } } ``` 在登录成功的地方,将用户信息存储到 Dictionary 和 Session 中: ```csharp // 登录成功后的代码 string username = "用户名"; // 将实际的用户名替换为登录时获取的用户名 string sessionId = Session.SessionID; Dictionary<string, string> userDictionary = (Dictionary<string, string>)Application["UserDictionary"]; // 将用户信息存储到 Dictionary 中 userDictionary[sessionId] = username; // 将键值对存储到 Session 中,以便在后续的请求中进行验证 Session["LoggedInUser"] = username; // 其他处理... // 重定向到需要跳转的面 Response.Redirect("WebForm1.aspx"); ``` 请注意,上述代码仅为示例,实际应用中可能需要进行更多的错误处理和安全验证。另外,为了在多个用户同时访问时保持数据的一致性,可能需要考虑使用线程安全的集合(如 ConcurrentDictionary)来存储用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值