当前位置: 首页 > article >正文

【混合开发】CefSharp+Vue 解决Cookie问题

问题表现

使用Element-admin架构搭建Vue前端项目,在与CefSharp搭配时,出现无法使用cookie的问题。

  1. 无法将token存入cookie
  2. cookie无法被读取

如下图,Cookies下显示file://。

在这里插入图片描述

正常的Cookies显示,Cookies显示为http://域名,如下图:

在这里插入图片描述

解决问题

经过确认,已肯定:

  • 以Url加载的服务方式的前端可以通过C#动态添加或删除Cookie。
  • 以本地化方式加载的前端无法通过C#动态添加或删除Cookie。

如果你是Url加载服务方式的前端,如下解决

//初始化浏览器对象
string webUrl = "http://127.0.0.1:8080";
chromeBrowser = new ChromiumWebBrowser(webUrl);
chromeBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(chromeBrowser);

//加入cookie
CefSharp.Cookie cookie = new CefSharp.Cookie();
cookie.Name = "cookie_name";
cookie.Value = "cookie_value";
cookie.Domain = "";//为空表示使用域名
cookie.Path = "";//为空表示使用/
cookie.Expires = DateTime.Now.AddDays(1);

ICookieManager cookieManager = Cef.GetGlobalCookieManager();
//IP或域名必须与实际前端服务保持一致
cookieManager.SetCookie(webUrl, cookie);

如果你是本地化方式加载的前端,如下解决

创建一个Cookie类:

   public class CookieUtil
    {
        public static CookieUtil Instance = new CookieUtil();

        private Dictionary<string, string> dicCookie = new Dictionary<string, string>();

        public string GetCookie(string name)
        {
            if (dicCookie.ContainsKey(name))
            {
                return dicCookie[name];
            }
            else
            {
                return "";
            }
        }

        public void AddCookie(string name,string value)
        {
            if (dicCookie.ContainsKey(name))
            {
                 dicCookie[name]=value;
            }
            else
            {
                dicCookie.Add(name,value);
            }
        }

        public void RemoveCookie(string name)
        {
            dicCookie.Remove(name);
        }

        public void ClearAll()
        {
            dicCookie = new Dictionary<string, string>();
        }
    }

创建AppService类:

    public class AppService
    {
        public string login(string username, string password)
        {
            string tokenValue = "admin-token";
            return JsonUtil.Instance.Success(new { token = tokenValue });
        }
        public string getCookie(string name)
        {
            return CookieUtil.Instance.GetCookie(name);
        }

        public void setCookie(string name, string value)
        {
            CookieUtil.Instance.AddCookie(name, value);
        }

        public void removeCookie(string name, string value)
        {
            CookieUtil.Instance.AddCookie(name, value);
        }

        public void clearAll()
        {
            CookieUtil.Instance.ClearAll();
        }
    }

初始化浏览器类:

//初始化浏览器对象
string webUrl = "http://127.0.0.1:8080";
chromeBrowser = new ChromiumWebBrowser(webUrl);
chromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
chromeBrowser.Dock = System.Windows.Forms.DockStyle.Fill;
//声明使用C#端服务对象
chromeBrowser.JavascriptObjectRepository.Register("cefAppService", new AppService(), isAsync: false, options: BindingOptions.DefaultBinder);
this.Controls.Add(chromeBrowser);

http://www.kler.cn/a/507862.html

相关文章:

  • 正则表达式 匹配特定字符后的所有字符
  • JVM远程调试原理剖析
  • Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)
  • Docker
  • 【算法】图解两个链表相交的一系列问题
  • Laravel 中 Cache::remember 的基本用途
  • gitignore忽略已经提交过的
  • 【深度学习基础】线性神经网络 | softmax回归的简洁实现
  • 算法随笔_6: 下一个排列
  • linux 安装PrometheusAlert配置钉钉告警
  • 博客搭建 — GitHub Pages 部署
  • Spark任务提交流程
  • 学习记录1
  • 免费送源码:Java+SpringBoot+MySQL SpringBoot网上宠物领养管理系统 计算机毕业设计原创定制
  • el-table中使用el-image图片预览被其他表格遮挡,使用z-index层级设置无效
  • 从 Web3 到元宇宙:探索数字身份的奇幻演变
  • Sqlmap入门
  • OpenCV-ED绘制的使用(附源码)
  • 1.17学习记录
  • 使用Docker部署postgresql
  • Navicat For Mysql 1112 导出密码破解 python
  • PHP生产管理系统
  • 算法-最大连续1的个数
  • IntelliJ IDEA 路径问题总结:如何配置并显示当前工作目录
  • Python学习之旅:入门阶段(七)数据结构
  • 【C++】反向迭代器