Net Core 中WebAPI有關 Session的設置,及獲取


步驟一: 在Startup 文件中做相應的設置

ConfigureServices方法里添加

//ConfigureServices添加:

services.AddSession(options =>
            {
                options.Cookie.Name = ".AdventureWorks.Session";
                options.IdleTimeout = System.TimeSpan.FromSeconds(120);//設置session的過期時間
                options.Cookie.HttpOnly = true;//設置在瀏覽器不能通過js獲得該cookie的值
            });
            services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddHttpContextAccessor();
            #region 跨域
            services.AddCors(options =>
            options.AddPolicy("AllowSameDomain",
            builder => builder.WithOrigins().AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
            #endregion
//HttpContextAccessor 默認實現了它簡化了訪問HttpContext
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
 

Configure方法里面添加

app.UseSession();//UseSession配置在UseMvc之前

二  在具體的Control配置相應數據

1.   配置 並獲取httpcontext

示例:

public class HomeController : Controller
    {
        private IHttpContextAccessor _accessor;
        public HomeController(IHttpContextAccessor accessor)
        {
            _accessor = accessor;
        }
        public IActionResult Index()
        {
            var httpcontext = _accessor.HttpContext;
            return View();
        }
    }

 

2.  寫SessionHelper類

    public  class SessionHelper
    {
        private IHttpContextAccessor _accessor;

        private ISession _session ;
        private IRequestCookieCollection _requestCookie ;
        private IResponseCookies _responseCookie;
        public SessionHelper(HttpContext context)
        {
            _session = context.Session;
            _requestCookie = context.Request.Cookies;
            _responseCookie = context.Response.Cookies;
        }
        /// <summary>
        /// 設置session值
        /// </summary>
        /// <param name="session"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public  void SetSession(string key, string value)
        {
            var bytes = System.Text.Encoding.UTF8.GetBytes(value);
            _session.Set(key, bytes);
        }
        /// <summary>
        /// 獲取Session值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public  string GetSession(string key)
        {
            Byte[] bytes;
            _session.TryGetValue(key, out bytes);
            var value = System.Text.Encoding.UTF8.GetString(bytes);

            if (string.IsNullOrEmpty(value))
            {
                value = string.Empty;
            }
            return value;
        }
        ///// <summary>
        ///// 設置本地cookie
        ///// </summary>
        ///// <param name="key"></param>
        ///// <param name="value"></param>
        ///// <param name="minutes">過期時間</param>
        //public void SetCookies(string key,string value,int day = 1)
        //{
        //    _responseCookie.Append(key, value, new CookieOptions
        //    {
        //        Expires = DateTime.Now.AddDays(day)
        //    }) ;
        //}
        //public void  DeleteCookies(string key)
        //{
        //    _responseCookie.Delete(key);
        //}
        //public string GetCookiesValue(string key)
        //{
        //    _requestCookie.TryGetValue(key, out string value);
        //    if (string.IsNullOrEmpty(value))
        //    {
        //        value = string.Empty;
        //    }
        //    return value;
        //}
    }

3.  方法里調用sessionHelper

                    var httpContext = _accessor.HttpContext;
                    SessionHelper session = new SessionHelper(httpContext);
                    string key = "王明";
                    string value = "2020年 大運年";
                    //設置session值
                    session.SetSession(key, value);
                    //獲取session值
                    session.GetSession(key);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM