欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【混合开发】CefSharp+Vue 解决Cookie问题

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

2025/2/5 17:54:11 来源:https://blog.csdn.net/yueguangzhiyuan/article/details/145160300  浏览:    关键词:【混合开发】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);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com