如何在WCF中设置cookie并在调用Ajax的成功函数(或其他地方)中读取它

2024-01-23

我有一些 jQuery JavaScript 调用一个简单的 WCF Web 服务。对我来说,在 JavaScript 中设置 cookie 并在服务器端读取它相当容易。

这是该代码。

客户端(JavaScript):

document.cookie = "father=christmas";

服务器端(WCF 中的 C#):

var cookieHeader = WebOperationContext.Current.IncomingRequest.Headers[System.Net.HttpRequestHeader.Cookie];
if (!String.IsNullOrEmpty(cookieHeader))
{
    var match = cookieHeader.Split(';').Select(cookie => cookie.Split('=')).FirstOrDefault(kvp => kvp[0] == "father");
    if (match != null)
    {
        result = match[1]; // result now equals "christmas"
    }
}

但我还想在服务器上的 WCF 中设置一个 cookie 并在客户端上读取它。这是我的代码,但无法做到这一点。

服务器端(WCF 中的 C#):

WebOperationContext.Current.OutgoingResponse.Headers[System.Net.HttpResponseHeader.SetCookie] = "cloud=lonely";

客户端(jQuery JavaScript):

$(document).ready(function () {
    $.ajax({
        url: "/ScratchpadSite/Service.svc/Hallo",
        type: "POST",
        success: function (data, textStatus, jqXHR) {
            var xrh = jqXHR.getAllResponseHeaders();
            $('body').html('<p>Father ' + data.d + '<\/p>');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            $('body').html('<p>' + textStatus + ': ' + errorThrown + '<\/p>');
        }
    });
});

然而 xhr 的值(我希望包含我的“cloud=lonely”cookie 的变量)是



Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 04 Apr 2012 15:29:27 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 17
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close
  

(注意:我的网页(包括 JavaScript)和 WCF 服务驻留在同一服务器上,因此应该不存在跨域问题。)

我是否正确设置了响应标头 cookie?如果是这样,我应该在哪里寻找回报给客户的价值?如果不是我应该怎么做?


我希望这不是答案,但有一些有趣的评论这个问题 https://stackoverflow.com/q/7197455/575530. 朋友00 https://stackoverflow.com/users/816620/jfriend00指出根据这个W3规格 http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader-methodgetAllResponseHeaders() 将返回除 Set-Cookie 标头之外的所有标头。和Dan Tao https://stackoverflow.com/users/105570/dan-tao解释说,虽然浏览器会(可能?)在浏览器处理响应后复制 cookie 信息,但直到调用回调之后才会发生这种情况! Dan 建议“在完整回调中进行某种 setTimeout 处理”。

另一种可能的选择(我没有尝试过)建议德鲁·马什 https://stackoverflow.com/users/185859/drew-marsh在评论中他对“WCF -> ASMX 和 Cookies”的回答 https://stackoverflow.com/a/1604300/575530就是在WCF代码中使用消息检查器。

我不愿意设置超时(感觉就像黑客),并且我发现 WCF 代码更难用消息检查器部分逻辑来遵循,因此在等待另一个答案时,我将写入响应标头本身(而不是cookie)在 WCF 代码中如下所示:

WebOperationContext.Current.OutgoingResponse.Headers.Add("cloud", "lonely");

然后在 JavaScript/jQuery/Ajax 完整处理程序中读取该内容并将其写入 cookie,如下所示:

$(document).ready(function () {
    $.ajax({
        url: "/ScratchpadSite/Service.svc/Hallo",
        type: "POST",
        success: function (data, textStatus, jqXHR) {
            $('body').html('<p>Father ' + data.d + '<\/p>');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            $('body').html('<p>' + textStatus + ': ' + errorThrown + '<\/p>');
        },
        complete: function (jqXHR, textStatus) {
            var cloudsFeeling = jqXHR.getResponseHeader("cloud");
            if (cloudsFeeling) {
                document.cookie = "cloud=" + cloudsFeeling;
            }
        },
    });
});

我对使用 HTTPResponseHeader 代替 cookie 感到不舒服,我认为 cookie 是为此用途而设计的,所以请建议一个更好的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在WCF中设置cookie并在调用Ajax的成功函数(或其他地方)中读取它 的相关文章

  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 如何使用 jquery 拖动文本区域和输入

    我在用jQuery UI draggable拖动元素 但它似乎不适用于文本区域和输入 因为每当我单击它们时它们就会聚焦 这里有一个JSbin 演示 http jsbin com ICEYaZor 1 edit html js output的
  • jQuery ajax 调用包含重音字符的 url 将错误的 Uri 从 IE 发送到服务器

    我在使用 IE 发送包含重音字符的 url 时遇到问题 这是一个简单的函数 function runjQueryTest var url test Beyonc get url function 在服务器 PHP 上我记录了请求uri的值
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 如何为名称为数组的 jquery 表单验证插件创建规则?

    有谁知道当您有一个数组的名称属性时如何为 jquery 表单验证插件创建规则 eg
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • 当焦点/单击[重复]时选择 contenteditable div 中的所有文本

    这个问题在这里已经有答案了 我有 contenteditable div 如下 div style border solid 1px D31444 12 some text div 我需要的是 当我点击 div 时 所有文本都会自动被选中
  • 带有 JEditable 字段的 Tab 键

    我有一个使用 JQuery 和 Jeditable 在页面上创建可编辑文本元素的页面 在编辑元素时 我希望能够从一个元素切换到下一个元素 我不确定如何 使用jeditable或jquery捕获tab键事件 keycode 9 一旦检测到该事
  • 获取 FileReader() 的结果对象

    有什么方法可以在不通过函数的情况下获取 FileReader 的结果对象 我在下面制作了示例代码 HTML br br br div div JS var code lorem ipsum input type file change fu
  • WCF 服务引用从 WSDL 生成 void 方法

    这是我第一次尝试使用 WCF 所以我猜我做错了什么 我正在尝试访问 WSDL 定义的肥皂服务http confluence atlassian com rpc soap axis confluenceservice v1 wsdl http
  • jQuery 中的目标 @import 没有 ID 也没有其他属性

    我有这个 jQuery 代码 document ready function function adjustStyle width width parseInt width if width lt 701 style type text c
  • 按搜索值过滤元素 - 多个单词

    我有一个由 DIV 和 INPUT 搜索框组成的列表
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • Jquery 数据表列总和

    我只是参考一下这个链接 https datatables net examples advanced init footer callback html了解如何获取 jquery 数据表中的列总计 但我已经完成了一半的项目 我在html页面
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 在 JavaScript 循环之外声明变量可以提高速度和内存?

    C 也有类似的问题 但我们没有看到 JavaScript 的任何问题 在循环内声明变量是否可以接受 假设循环有 200 次迭代 使用样本 2 相对于样本 1 是否有性能要求 内存和速度 我们使用 jQuery 来循环 它提高了我们将 var

随机推荐

  • 如何尽可能干净地使用 VS C++ GetEnvironmentVariable?

    这与其说是一个问题 不如说是一种迂腐的做法 所以就这样吧 我已经制作了一个很好的小程序 它是我的 Linux 操作系统本机的 但我认为它也足够有用 可以存在于我的 Windows 机器上 因此 我想访问Windows的环境变量 MSDN引用
  • 如何在 R 中按行名合并 2 个以上的数据帧?

    我从 4 个 df 收集数据 并希望按行名合并它们 我正在寻找一种有效的方法来做到这一点 这是我所拥有的数据的简化版本 df1 lt data frame N sample seq 9 27 0 5 40 replace T P sampl
  • 具有 sf 的行之间的点距离

    我在简单功能中保存了多个轨迹 sf 的类型POINT 我想计算后续位置 即行 之间的欧几里德距离 到目前为止 我已经使用 手动 计算距离用于计算 2D 空间中欧几里得距离的毕达哥拉斯公式 https en wikipedia org wik
  • ASP.NET 如何将容器值作为 javascript 参数传递

    我正在使用一个o关于网格控制 http www obout com grid 与文本框上的模板 我想将一个参数传递给 JavaScript 即用户单击网格时网格的当前行索引 但结果是 onClick setGridInEditMode gt
  • 类型对象不是可迭代的 Django

    我正在使用 Django 创建个人作品集网站 我正在制作一个名为 技能 的新模型 我想要为我拥有的每项技能提供一个不同的模型实例 我以前有使用 Django 的经验 所以我只是像往常一样执行相同的过程 然而 由于某种原因 这次我在注册模型时
  • 错误:清单合并失败:uses-sdk:minSdkVersion 1 不能小于库 [__tested_artifact__::CordovaLib] 中声明的版本 19

    我第一次创建一个 cordova android 项目 构建项目一切顺利 构建项目后 当我尝试在 Android IDE Android Studio 中打开时 我收到这个错误 错误 清单合并失败 uses sdk minSdkVersio
  • htaccess 文件拒绝所有,重定向到 404 在 403.shtml 上找不到,但未定义自定义错误页面

    我正在 cPanel 中的新插件域中设置一个快速内部项目 这个特定的安装了 SSL 证书 我正在构建我的 htaccess 并添加了一个
  • bash - Shell 脚本打开多个终端并执行不同的命令[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我尝试编写自己的 shell 脚本 到目前为止 我已经成功打开了 4 个 xterminal 由于 hold 选项 它们只能执行一个命令 如
  • .NET Core 中的一对多关系数据播种

    我在将数据播种到我的数据库时遇到问题OnModelCreating method 我想为我的数据库添加种子国家 States and Cities但我不知道当他们有的时候该怎么做一对多关系 Models public class City
  • rsync 排除目录但包含子目录

    我正在尝试使用 rsync 将项目复制到我的服务器 我的子目录中有项目特定的安装脚本 项目 规格 安装 project1 我想做的就是排除其中的所有内容项目 规格目录 但项目特定的安装目录 项目 规格 安装 project1 rsync a
  • 我需要在 javafx 中创建后退按钮功能?

    我目前正在使用类似的东西将此代码绑定到 fxml javafx 按钮 Parent parent FXMLLoader load getClass getResource AolRun fxml Stage stage new Stage
  • ALV 报告填补了文档之间的空白

    我试图挑战自己制作一份按公司代码显示所有数据的 ALV 报告 但有些文件编号有差距 我想填补缺失号码之间的空白 例如 最后索引值 20012 那么下一个值是 20014 如果报表使用内表中存在的所有数据 如何在网格中插入 20013 Tha
  • 选择并 ForEach 列表 <> [重复]

    这个问题在这里已经有答案了 我对 C 很陌生 并尝试使用 lambda 表达式 我有一个对象列表 我想从列表中选择项目并对所选项目执行 foreach 操作 我知道我可以在不使用 lambda 表达式的情况下做到这一点 但想知道是否可以使用
  • 将无序列表的元组转换为 pandas DataFrame

    我正在使用图书馆usaddress从我拥有的一组文件中解析地址 我希望我的最终输出是一个数据框 其中列名称代表地址的一部分 例如街道 城市 州 行代表我提取的每个单独地址 例如 假设我有一个地址列表 addr 123 Pennsylvani
  • 如何修剪字符之间的空白

    如何删除C 中字符之间的空格 Trim 可用于删除字符串开头和结尾的空格 例如 C Sharp Trim 结果 C Sharp 但如何将字符串变成CSharp 我们可以使用删除空格for or a for each与临时变量一起循环 但是有
  • 页面加载后 Javascript 运行函数

    我正在尝试用 Javascript 创建一个小型自动化脚本 我想使用 Opera 的用户脚本功能来定义要运行的外部脚本 并在网站上运行该脚本 我之前曾使用此功能来运行我用外部站点编写的脚本 效果很好 我需要等到页面加载才能运行脚本 但我似乎
  • python csv问题[重复]

    这个问题在这里已经有答案了 我只是在 python 中测试 csv 组件 但遇到了一些问题 我有一个相当标准的 csv 字符串 默认选项似乎都适合我的测试 但结果不应该将 1 2 3 4 连续分组 将 5 6 7 8 连续分组 非常感谢您提
  • Snowflake Python Pandas 连接器 - 使用 fetch_pandas_all 时出现未知错误

    我正在尝试使用 python pandas 连接器连接到雪花 我在 Windows 上使用 anaconda 发行版 但卸载了现有的连接器和 pyarrow 并使用此页面上的说明重新安装 https docs snowflake com e
  • Netbeans 热键关闭突出显示的搜索文本?

    我用谷歌搜索过这个问题 但没有找到 如果您知道如何操作 请分享 对于 7 0 工具 gt 选项 gt 键盘映射 gt 切换突出显示搜索 我的是 Alt Shift H
  • 如何在WCF中设置cookie并在调用Ajax的成功函数(或其他地方)中读取它

    我有一些 jQuery JavaScript 调用一个简单的 WCF Web 服务 对我来说 在 JavaScript 中设置 cookie 并在服务器端读取它相当容易 这是该代码 客户端 JavaScript document cooki