为何要转这一篇文章?在客户端里用c#编写的代码,怎么知道浏览器里登录者是谁并自动帮客户端登陆呢,有没有浏览器登录后客户端知道是谁?共享cookie怎么实现 的,目前流行的QQ是客户端登录后浏览器知道是谁,用的是一个浏览器插件和浏览器本身的支持以确保安全,这个刚好相反,是怎么实现的?我看到网上有一篇文章:C#利用浏览器获取完整COOKIE示例。
2.解决方法1: 使用WIN API获取
3.解决方法2:自已写方法读取本地COOKIE文件。(如果有多个浏览器估计得支持多个浏览器目录下的cookie读取才行)
使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIe
1.原因:
此 Cookie,加入了。httponly
2.解决方法1: 使用WIN API获取
就可以使用InternetGetCookieEx这个Win API来取得,下面是API的方法宣告
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref
System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, int dwFlags,
IntPtr dwReserved);
private static string GetCookies(string url)
{
uint datasize = 256;
StringBuilder cookieData = new StringBuilder((int)datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero))
{
if (datasize < 0)
return null;
cookieData = new StringBuilder((int)datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
return null;
}
return cookieData.ToString();
}
实际上它是通过本地COOKIE文件的读取,来取得COOIE的
3.解决方法2:自已写方法读取本地COOKIE文件
public string Cookie()
{
if (this.Url == null)
return null;
string dir = this.Url.Host;
FileStream fr = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "
index.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
来自:
http://www.builder.com.cn/2013/0226/2145832.shtml
扩展阅读:
关于C# 获取不到safari浏览器Cookie的问题:http://www.cnblogs.com/a546558309/archive/2012/08/21/2648601.html
用C#如何创建、读取cookie:
http://blog.sina.com.cn/s/blog_7e1662b201013nz8.html
2.解决方法1: 使用WIN API获取
3.解决方法2:自已写方法读取本地COOKIE文件。(如果有多个浏览器估计得支持多个浏览器目录下的cookie读取才行)
使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIe
1.原因:
此 Cookie,加入了。httponly
2.解决方法1: 使用WIN API获取
就可以使用InternetGetCookieEx这个Win API来取得,下面是API的方法宣告
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref
System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, int dwFlags,
IntPtr dwReserved);
private static string GetCookies(string url)
{
uint datasize = 256;
StringBuilder cookieData = new StringBuilder((int)datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero))
{
if (datasize < 0)
return null;
cookieData = new StringBuilder((int)datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))
return null;
}
return cookieData.ToString();
}
实际上它是通过本地COOKIE文件的读取,来取得COOIE的
3.解决方法2:自已写方法读取本地COOKIE文件
public string Cookie()
{
if (this.Url == null)
return null;
string dir = this.Url.Host;
FileStream fr = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "
index.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
来自:
http://www.builder.com.cn/2013/0226/2145832.shtml
扩展阅读:
关于C# 获取不到safari浏览器Cookie的问题:http://www.cnblogs.com/a546558309/archive/2012/08/21/2648601.html
用C#如何创建、读取cookie:
http://blog.sina.com.cn/s/blog_7e1662b201013nz8.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/6070/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表