zoukankan      html  css  js  c++  java
  • NetCore入门篇(九):NetCore项目使用Session以及用Redis做分布式

    一、简介


    1、因为Net Core默认是没有启动Session功能的,如果需要使用,需要通过代码开启。

    2、本篇说明如果启用默认Session实现,即Session存到内存中。

    3、本篇扩展说明如何用Redis做Sessoin服务器,实现分布式。

    二、开启默认Session功能


    1、编写一个api,先写Session,再读取Session返回。

    2、Startup未启动Session功能,查看效果,报错。

    3、在Startup中添加两处启用Session代码,查看效果,正常。这里有知识点,UseSession需要写在UseMvc之前,否则会报错。

    4、UseSession写在UseMvc之一,再查看效果,报错。

    api代码:

     public class OneController : Controller
    {
        public string GetString(string id)
        {
            HttpContext.Session.SetString(id, Guid.NewGuid().ToString());
            return HttpContext.Session.GetString(id);
        }
    }

    未启用Session,查看效果

     

    启用Session,代码简单,自己敲就行。

    查看效果

     

     UseSession往后放

     查看结果,又出错了

     三、使用Redis做Session服务


     1、Net Core默认已经做了Session的Redis实现,只需要开启就可以了。

    2、先要下载安装Redis,如果没有,就用楼主的就行了,连接在代码里,只是用来测试用。Redis默认是不需要用户名密码的。

    3、再次是需要下载个Redis客户端,我使用的是RedisDesktopManager

    4、在Startup中添加Redis配置信息。

    5、查看运行效果:Session创建前后,Redis数据库的差异。

    Startup配置代码

    public void ConfigureServices(IServiceCollection services)
    {
        //就这一行代码就行了。
        services.AddDistributedRedisCache(option => option.Configuration = "bitdao.cn:1012,abortConnect=false,connectRetry=3,connectTimeout=3000,defaultDatabase=1,syncTimeout=3000,version=3.2.1,responseTimeout=3000");
        services.AddSession();
        services.AddMvc();
    }

    Session创建前

     访问API创建 Session

    创建Session之后

    四、Redis做Session服务的意义


    1、Session的原理是在Cookies存一个SessionId。

    2、分布式部署时,服务器A写一个Session时,只存在A服务器的内存中。用户第二次请求时,可能会访问到服务器B,只时候用SessionId去读取Session是空值。

    3、如果用Redis做Session服务器,无论用户访问被分配到哪台服务器,都会用SessionId去Redis取Session,都能取到值。

    见图如下

    五、总结


     1、Net Core默认没有启动Sessoin,需要正确配置启动Session

    2、分布式部署时,可以使用Redis做Session服务器,Net Core已经实现,一行配置代码即可。

    <返回NetCore入门系列目录

    前往下一篇:NetCore入门篇(十):NetCore项目使用Cookies>

    斩后知
  • 相关阅读:
    mongodb 修改最大连接数
    js hook eval
    js hook ajax
    js hook cookie
    windows启动redis命令行
    springboot结合redis使用token实现登录注销功能
    springboot实现滑动验证码
    Java读取指定路径文件中的所有资源
    com.alibaba.fastjson.annotation.JSONField依赖
    springboot和session实现验证码功能
  • 原文地址:https://www.cnblogs.com/dyhao/p/14436861.html
Copyright © 2011-2022 走看看