首页 新闻 赞助 找找看

cefsharp设置cookie后,网站上js获取不到cookie,

0
悬赏园豆:10 [已解决问题] 解决于 2019-09-17 09:51

(客户端设置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 就不行了,也不知道咋回事

大da脸的主页 大da脸 | 初学一级 | 园豆:73
提问于:2019-07-17 20:08
< >
分享
最佳答案
0

是不是没有设置CefSharp保存cookie
var settings = new CefSettings();
settings.CachePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\Cache";
settings.PersistSessionCookies = true;
我加了这个后就可以了。

收获园豆:2
军长_cnblogs | 初学一级 |园豆:18 | 2019-08-26 11:30
其他回答(5)
0

Domain = RequestUrl ,怎么用的是 RequestUrl ?应该用请求的主机名

收获园豆:2
dudu | 园豆:31075 (高人七级) | 2019-07-17 20:18

RequestUrl就是请求的主域名

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-07-18 08:35

我举个例子:例如

RequestUrl="http://chat.xiaobeiju.cn";

我这里的赋值就是这样的

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-07-18 08:36

@大da脸: 那应该 Domain="chat.xiaobeiju.com";

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2019-07-18 08:41

@dudu: 你是说 不加前面的http://?

我刚试了 好像还是不起作用

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-07-18 08:46

@大da脸: 是的

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2019-07-18 08:52

@dudu: 我还了种方法,也是获取不到,如果有mac cookie,会自动弹出的,

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-07-18 09:10
0

看看浏览器控制台报的什么错误?禁止跨域请求?

收获园豆:2
刘下来 | 园豆:919 (小虾三级) | 2019-07-18 07:55

同一个站点

wpf+webbrowser是可以的,能不能说明是允许跨域的

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-07-18 08:37

@大da脸: 断点js代码看看哪里出的问题,对症下药

支持(0) 反对(0) 刘下来 | 园豆:919 (小虾三级) | 2019-07-18 19:00
0
[System.Runtime.InteropServices.DllImport("wininet.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
收获园豆:2
清风梦似花 | 园豆:208 (菜鸟二级) | 2019-07-18 10:02
0

 

 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一样。

收获园豆:2
花飘水流兮 | 园豆:13560 (专家六级) | 2019-07-18 12:05
0
这个可以!亲测有效!
var
cookieManager = CefSharp.Cef.GetGlobalCookieManager(); await cookieManager.SetCookieAsync("http://" + domain, new CefSharp.Cookie { Domain = domain, Name = name, Value = value, Expires = DateTime.MinValue });
大da脸 | 园豆:73 (初学一级) | 2019-07-27 09:33

有没有完整demo
访问可以读取到cookie 就是没有登录状态

支持(0) 反对(0) ljsheng | 园豆:200 (初学一级) | 2020-09-11 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册