我过去只制作过单页网络应用程序;有了这些,一旦用户连接,我就会读取存储在他们的 cookie 中的密码哈希,并将其与存储在我的数据库中的值相匹配,以确定用户是否已经登录。
我现在想创建一个包含多个网页的网站,我刚刚意识到每次用户进入新页面时都需要查询数据库;这对我来说似乎效率极低。有没有更好的方法来保持与客户端的持续会话而不会在此过程中使我的数据库/服务器紧张?
我过去只制作过单页网络应用程序;有了这些,一旦用户连接,我就会读取存储在他们的 cookie 中的密码哈希,并将其与存储在我的数据库中的值相匹配,以确定用户是否已经登录。
我现在想创建一个包含多个网页的网站,我刚刚意识到每次用户进入新页面时都需要查询数据库;这对我来说似乎效率极低。有没有更好的方法来保持与客户端的持续会话而不会在此过程中使我的数据库/服务器紧张?
看看使用会话对象,例如 HttpContext.Session["UserAuth"] = true;
当您在第一页(例如登录)上对用户进行身份验证时,您可以像上面的示例一样创建一个会话。然后,一旦您重定向到下一页,只需检查会话是否确实存在并且有效。
检查会话:
if(HttpContext.Session["UserAuth"] != null) { if(HttpContxt.Session["UserAuth"].toString() == "true") { //Session is valid and user is logged in. } else{ //Session is invalid and user is not logged in. } }
因此,您要检查用户是否有效的每个页面都可以进行上述检查。只要您在数据库身份验证时在第一页上创建了会话。
请注意,上面的代码只是为了让您了解如何执行此操作。
“UserAuth”只是您为要存储的会话提供的名称。它绝对可以是任何东西。在这种情况下,您在 Session 中存储的值是“true”。
因此,当您检索 Session 的值时,您只需得到“true”,这意味着用户已登录。
例如,当您注销用户时,您可以以与最初创建会话相同的方式将会话“UserAuth”的值更改为 false。
例如
HttpContext.Session["UserAuth"] = false;