使用 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 真的帮了我大忙。
通常 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 真的帮了我大忙。