建立会议

时间:2019-04-05 00:59:19

标签: c#

我是Web开发的初学者。所以,请理解我。 我想使用c#创建会话或路由,就像在php中一样。 这就是示例逻辑。

if (SESSIONHasValue = True){
//The User can Access the whole website;
}else{
//Maintain to LOGIN PAGE of the Website;
}

我想创建一个功能,即使用户在chrome的地址栏中键入索引页面的地址,也可以以登录形式重定向用户。 我已经像我一样看到了这个问题,但这是我需要的相同功能吗? Create session in C#

如果您可以教我如何使用它进行创建。请帮忙。

致谢

1 个答案:

答案 0 :(得分:1)

我将向您展示在.NET MVC中使用Session的非常基本的示例。首先,您必须设置您的登录模型,该模型基本上是您要求用户在登录过程中输入的字段。就我而言,我假设基本属性为usernamepassword

namespace MyExample.Models

public class LoginRequestModel
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

现在,当您向用户显示Login页面时,您会将这些模型属性传递给视图。我更喜欢使用强类型的Model-View体系结构,但是您可以使用其他方法(例如AJAX或FormData)将表单变量处理到控制器中。现在,在Login控制器下的Login方法中,我像这样传递模型:

using MyExample.Models

namespace MyExample.Controllers
{
    public class LoginController : Controller
    {
      public ActionResult Login()
      {
       return View(new LoginRequestModel());
      }
    }
}

请注意我将LoginRequestModel类放入的名称空间。您将需要在控制器中声明该名称空间,否则会出现错误。进入我们的程序,以上方法将初始化LoginRequestModel的新实例并将其发送到您的View,您将能够使用@Html helper扩展将其绑定到HTML。它们采用Razor语法,在处理表单方面非常出色。

现在,要在视图中访问模型,请执行以下步骤:

@using MyExample.Models
@model LoginRequestModel

<html lang="en">
<head>
<!-- Your scripts and associated links go in this section -->
</head>
<body>

 @using (Html.BeginForm("Authenticate", "Login", FormMethod.Post, new {role = "form", enctype = "multipart/form-data" }))
 {
   @Html.AntiForgeryToken()
   <div>
       @Html.TextBoxFor(m => m.UserName, new { @id = "exampleInputUsername", @required = "required", @placeholder = "Enter User ID", @autocomplete = "off" })
   </div>

   <div>
       @Html.TextBoxFor(m => m.Password, new { @id = "exampleInputPassword", @required = "required", @placeholder = "Enter Password", @autocomplete = "off", @type = "password" })
    </div>

    <button type="submit">Login</button>
 }
</body>
</html> 

这将创建一个具有两个输入文本框和一个提交按钮的视图。文本框已绑定到您的模型属性UserNamePassword。现在,如果您会注意到以下行:Html.BeginForm("Authenticate", "Login", FormMethod.Post,,将告诉表单将​​发送到的Authenticate方法您的Login控制器使用POST请求。另外,如果您会看到以下行:@Html.AntiForgeryToken(),则可以进一步了解here。这基本上可以通过验证令牌来防止对表单进行任何CSRF攻击。您可以根据需要添加JQuery验证并使用CSS设置视图样式。

主要部分现在到了。当您填写此表单并点击Submit时,路由将在Authenticate控制器中搜索Login方法。因此,我们需要在控制器内部创建此方法。

using MyExample.Models
using System.Net.Http;
using System;

namespace MyExample.Controllers
{
    public class LoginController : Controller
    {
      public ActionResult Login()
      {
       return View(new LoginRequestModel());
      }

     [HttpPost]
     [ValidateAntiForgeryToken]
     public ActionResult Authenticate(LoginRequestModel loginRequest)
     {
       //Apply your authentication logic here
       bool result = someMethodToAuthenticate(loginRequest)
        if(result==true)
         {
          //Setup your session variables here
          Session["UserName"] = loginRequest.UserName;
          Session["TimeLoggedIn"] = DateTime.Now;
          return RedirectToAction("View Where You Want To Redirect", "Controller Where the View is");
         }
        else
         {
           ViewBag.setError = "Invalid login credentials supplied";
           return View("InvalidLogin");
         }
      }
   }
}

请注意,我已经导入了命名空间System.Net.Http,该命名空间包含当前HTTP请求的Session对象。编写身份验证逻辑后,根据结果,您可以设置会话变量,如上所示。您可以在程序生命周期的任何地方使用这些变量,只要不破坏它们即可。您可以通过以下方式访问会话变量:string loggedInUser=Session["UserName"];。为了销毁会话变量,您可以执行以下操作:

public ActionResult Logout()
 {
   Session.Abandon();
   Session.Clear();
   return RedirectToAction("Login", "Login");
 }

您还可以删除特定的会话变量,例如:Session.Remove("UserName");

为了检查会话,您可以执行以下操作:

public ActionResult SessionCheck()
 {
   string message = string.Empty;
   if (Session["UserName"] == null)
    {
      message = "Session expired. Please Login again";
    }
    return Json(message, JsonRequestBehavior.AllowGet);
  }

您可以在整个程序中使用AJAX来检查此方法,也可以使用SessionState

AJAX示例:

function IsSessionActive()
{
    var url ="/Login/SessionCheck";
    var param = {};
    param = JSON.stringify(param);
    var result = getResultPost(url, param);
    if (result != "")
    {
        alert("Session has expired, Please login again");
        return true;
    }
}

function getResultPost(url, param) {
    var result;

    $.ajax({
        url: url,
        type: "POST",
        async: false,
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus) {
            result = data; 
        },
        error: function (e) {             
            result = "Error";
        }          
    }); 
    return result;
}

最后在您的视图中调用它,就像这样:

$(document).ready(function () {
    if (IsSessionActive()) return false;
})

干杯。