我正在开发一个应用程序,其中用户(如果在db中拥有一个帐户)可以登录网站,然后执行某些功能。这些功能之一涉及创建博客。该博客正在使用同一数据库显示在另一个项目应用程序中。现在,当用户登录后创建博客时,我需要存储创建博客的人来做到这一点,我想出了两种方法。我要么继续在每个页面URL上将用户ID作为参数传递,要么我可以创建一个会话以便在登录期间存储它。
我认为后者是一个更好的选择,但我对如何做到这一点有些迷失。我正在创建一个3项目层应用程序。客户端在angularjs中完成。我的c#控制器仅用于将json数据传递到另一层,然后与另一层的数据库进行通信。
项目文件太大,但是我可以为此编写示例代码。
HTML:
259 ms
AngalrJs
<div ng-app="Module">
<div ng-controller="AppController">
<input ng-model="user.Email" type="email"\>
<button type="button" ng-click="UserLogin()"\>
</div>
</div>
控制器:
var app = angular.module('Module', []);
app.controller("AppController", function ($scope) {
$scope.loginchk = function () {
Post("/User/LoginValidation", $scope.user, false, $("#btnlogin")).then(function (d) {
if (d.Success) {
window.location.href = "/User/LoggedIn?emailId=" + $scope.user.Email;
}
ShowMessage(d);
});
}
})
业务逻辑层
UserLogic:
public JsonResult LoginValidation(LoginUser user) {
return Json((new userLogic()).LoginChk(user), JsonRequestBehavior.AllowGet);
}
现在我知道我可以在像这样的 public Message LoginChk(LoginUser user) {
Message msg = new Message();
try {
Account userProfile = db.Accounts.Where(b => b.Email == user.Email).FirstOrDefault();
if (userProfile == null)
{
msg.Success = false;
msg.MessageDetail = "Account Email does not exist";
}
else
{
if (userProfile.password != user.Password)
{
msg.Success = false;
msg.MessageDetail = "Wrong Password";
}
else
{
msg.Success = true;
msg.MessageDetail = "Logged In";
}
}
}
catch(Exception ex)
{
msg.Success = false;
msg.MessageDetail = "DB connection failed.";
}
return msg;
}
控制器中创建会话变量了
但我不确定它是否可以与我的应用程序一起使用,因为我有多个控制器,但仍将其传递给他们。所以我看不到在每个控制器中维护会话变量的意义,即使它没有被使用。我该如何创建会话?
答案 0 :(得分:1)
您可以使用客户端LocalStorage保存用户ID,并在需要时使用它, 因为它将以纯文本格式保存,所以您可以对其进行加密和保存。 在这里检查如何使用javascript进行加密 https://stackoverflow.com/a/40478682/7262120
答案 1 :(得分:1)
local storage is best option to do that :
window.localStorage.setItem("userId",useId);
to get again:
localStorage.getItem("userId");