2 liu ly95 Liu_LY95 于 2017.09.11 15:03 提问

.net core View获取Session

采用Microsoft.AspNetCore.Session

HttpContext.Session.SetString("CurrentUser", “A用户名称”);

我怎么在前端判断Session CurrentUser不是空的呢,然后显示出来

3个回答

qq_26433213
qq_26433213   2017.09.11 16:29
已采纳

可以用控制器拦截,每一个请求都会判断是否登陆,未登陆则返回首页这样

 一个最基本的控制器拦截,就是当我们直接通过在地址栏输入访问路由地址时,首先应该判断用户是否已经登录,如果没有登录应该实现跳转到登录页面。大致思路是通过重写Controller的OnActionExecuting方法,在OnActionExecuting方法中判断用户是否登录并实现跳转。

3.1 新建控制器基类
在Fonour.MVC中右键Controllers文件夹,添加一个名称为FonourControllerBase的控制器基类,内容如下。

复制代码
public abstract class FonourControllerBase : Controller
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        byte[] result; 
        filterContext.HttpContext.Session.TryGetValue("CurrentUser",out result);
        if (result == null)
        {
            filterContext.Result = new RedirectResult("/Login/Index");
            return;
        }
        base.OnActionExecuting(filterContext);
    }
}
复制代码
需要进行登陆验证的控制器,修改为从FonourControllerBase继承,这里我们修改HomeController

public class HomeController : FonourControllerBase
启动程序,在未登录情况下,通过地址栏直接访问/Home/Index,会发现已经自动跳转到系统登录界面。
qq_26433213
qq_26433213   2017.09.11 15:08

session存在于服务器上,我们可以在controller中使用session
HttpContext.Session.SetString("code","123456");

HttpContext.Session.GetString("code");

前端要用的话可以请求后端,然后后端返回值到前端

Liu_LY95
Liu_LY95 回复花下泥: 恩,我明白。那有没有什么方法,写一个全局变量,前端可以判断去得到的
2 个月之前 回复
qq_26433213
qq_26433213 回复Liu_LY95: viewbag每个页面都不同,你切换页面之后就是别的页面的ViewBag了,因为你在新页面没有设置viewbag,所以显示用户未登录
2 个月之前 回复
Liu_LY95
Liu_LY95 回复Liu_LY95: 然后在页面点击别的页面的时候,viewbag清空了,所以就显示用户未登录
2 个月之前 回复
Liu_LY95
Liu_LY95 我页面逻辑是这样的:有个_Layout,用户可以登录也可以不登录,用户点击登录的时候,验证通过,后台ViewBag,返回给PartialView(),局部视图判断viewBag
2 个月之前 回复
qq_26433213
qq_26433213   2017.09.11 15:28
Csdn user default icon
上传中...
上传图片
插入图片