使用 c# 编写 cookie 并使用 javascript 读取

Write cookie using c# and read using javascript

通常 Cookie 存储在以下位置:

C:\Users\SomeUser\AppData\Roaming\Microsoft\Windows\Cookies

我想做的是使用 c# 在此位置的文本文件中写入 cookie,这非常简单,完全没问题,没问题。

但我无法在我的网络应用程序中使用 java-script 找到从该文件读取 cookie 的方法。

有可能吗?

我相信这是可能的,但由于安全问题,这不会是直截了当的。

检查这个 jQuery 库:https://github.com/carhartl/jquery-cookie


注意:某些浏览器例如。 Chrome,限制使用文件中的 cookie:Why does Chrome ignore local jQuery cookies?

JavaScript 没有从光盘读取文件的权限。您不能从本地文件发出跨域请求,因为它不在域中。您需要在本地网络服务器实例上托管 C:\index.html 才能使其正常工作。或者使用以下参数启动Chrome。

--disable-web-security -–allow-file-access-from-files

您还应该将以下内容添加到您的服务响应中:

response.setHeader("Access-Control-Allow-Origin", "*");

我想你正在寻找你在评论中提到的这个答案..

如果用户已经登录我的桌面应用程序,我希望用户自动登录,使用 cookie 我想将登录用户的一些信息传递给浏览器

。为此,您需要生成一个令牌,该令牌可用于存储在数据库中的一次性登录,并确保令牌在未被使用的情况下过期。 8小时。当您启动网站时,将查询字符串中的令牌传递给网站。然后网站使用令牌将用户的会话连接到他们的帐户,然后令牌被删除。

你也可以使用Single sign on WIKI

经过一番努力和搜索,我找到了一种方法。我们可以使用 wininet.dll 中的 InternetSetCookie 方法为特定的 url 或网络应用程序设置 cookie。

将此代码添加到您的 class:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InternetSetCookie(string url, string name, string data);



public static bool SetWinINETCookieString(string url, string name, string data)
{
   return Form1.InternetSetCookie(url, name, data);
}

用法:

var cookieOutput = SetWinINETCookieString("http://localhost:49549/Home/Index", "dataToTest", "thisIsTheData;Expires = " + DateTime.Now.AddDays(10).ToString("R"));

出于测试目的,我硬编码了我的特定应用程序 url。

然后在 Web 应用程序中我写了这个 javascript 来获取 cookie 值:

$(document).ready(function () {

            alert(getCookie("dataToTest"));

});

这里是 getCookie 函数:

function getCookie(name) {
            var value = "; " + document.cookie;
            var parts = value.split("; " + name + "=");
            if (parts.length == 2) return parts.pop().split(";").shift();
        }

This SO post 真的帮了我大忙。