(客户端设置cookie)(网页上接收cookie)
1:代码用的是cefsharp
2:浏览器插件用的是 ChromiumWebBrowser
private ChromiumWebBrowser browser;
试了好多种方法,都是本地可以成功设置,但是网页上js获取不到cookie,弹出的都是null
例如:
var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); cookieManager.SetCookieAsync( RequestUrl, new CefSharp.Cookie{ Domain = RequestUrl, Name = "MAC", Value = mac, Expires = DateTime.MaxValue } );
普通的客户端cookie设置方法 ,wpf+webbrowser测试正常,
换成winform+ChromiumWebBrowser 就不行了,也不知道咋回事
是不是没有设置CefSharp保存cookie
var settings = new CefSettings();
settings.CachePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\Cache";
settings.PersistSessionCookies = true;
我加了这个后就可以了。
Domain = RequestUrl
,怎么用的是 RequestUrl ?应该用请求的主机名
RequestUrl就是请求的主域名
我举个例子:例如
RequestUrl="http://chat.xiaobeiju.cn";
我这里的赋值就是这样的
@大da脸: 那应该 Domain="chat.xiaobeiju.com";
@dudu: 你是说 不加前面的http://?
我刚试了 好像还是不起作用
@大da脸: 是的
@dudu: 我还了种方法,也是获取不到,如果有mac cookie,会自动弹出的,
看看浏览器控制台报的什么错误?禁止跨域请求?
同一个站点
wpf+webbrowser是可以的,能不能说明是允许跨域的
@大da脸: 断点js代码看看哪里出的问题,对症下药
1 visitor.OnVisitCookie += c => 2 { 3 try 4 { 5 BrowserCookies.Add(c.cookie); 6 Cookies.Add(new System.Net.Cookie(c.cookie.Name, (c.cookie.Value.Contains(",") || c.cookie.Value.Contains(";")) ? c.cookie.Value.UrlEncode(): c.cookie.Value, c.cookie.Path, c.cookie.Domain)); 7 } 8 catch (Exception e) 9 { 10 Loger.Log.Error($"Cookie:\t{c.cookie.Name}\t{c.cookie.Value.UrlEncode()}\t{ c.cookie.Path}\t{c.cookie.Domain}", e); 11 } 12 return false; 13 };
上图是取的,写入格式参照图中。
注意符号等字符编码,代码展示就是为了说明这个情况和问题。
对于wininet.dll应该是不行的,cefsharp的http请求并不走此模块过。
你还可以用页面js注入cookie的方式做一下测试。
如何测试页端问题?——实现KeyboardHandle,f12 跟chrome一样。
这个可以!亲测有效!
var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); await cookieManager.SetCookieAsync("http://" + domain, new CefSharp.Cookie { Domain = domain, Name = name, Value = value, Expires = DateTime.MinValue });
有没有完整demo
访问可以读取到cookie 就是没有登录状态