Internet Explorer 中的 Go 和 Gorilla 会话

2023-12-26

我正在使用 Go 制作一个简单的 Web 应用程序,使用 gorilla 进行会话和路由,使用 Mustache 进行模板。我在登录时遇到问题,我相信是 IE 接受 cookie 的问题。该问题仅出现在 Internet Explorer 中,但在 Chrome 中登录可以正常工作。这是我的代码:

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/performance", Index)
    r.HandleFunc("/performance/login", Login)
    log.Fatal(http.ListenAndServe(":5901", r))
}

func Index(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "performance")
    if session.Values["username"] == nil {
        http.Redirect(w, r, "/performance/login", http.StatusSeeOther)
    }
    dict := session.Values
    fmt.Fprintf(w, mustache.RenderFileInLayout("templates/index.html", "templates/basepage.html", dict))
}

func Login(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        results := 0
        r.ParseForm()
        u := r.FormValue("username")
        pass := r.FormValue("password")
        p := PassEncrypt(pass)
        q := map[string]string{}
        rows, err := db.Query("SELECT username, name, title FROM user WHERE (username=$1) AND (password=$2)", u, p)
        if err != nil {
            log.Fatal(err)
        }
        for rows.Next() {
            var username string
            var name string
            var title string
            if err := rows.Scan(&username, &name, &title); err != nil {
                log.Fatal(err)
            }
            q["username"] = username
            q["name"] = name
            q["title"] = title
            results++
        }
        if results > 0 {
            session, _ := store.Get(r, "performance")
            session.Options = &sessions.Options{
                MaxAge: 900,
            }
            session.Values["username"] = q["username"]
            session.Values["name"] = q["name"]
            session.Values["title"] = q["title"]
            session.Save(r, w)
            http.Redirect(w, r, "/performance", http.StatusSeeOther)
        } else {
            http.Redirect(w, r, "/performance/login", http.StatusSeeOther)
        }
    } else {
        fmt.Fprintf(w, mustache.RenderFileInLayout("templates/login.html", "templates/basepage.html", nil))
    }
}

使用 IE 登录时,用户会被重定向回登录页面,因为会话值“用户名”为零,而在 Chrome 中,用户名已正确定义并提供索引页面。由于某种原因 IE 不接受 cookie,但我更改了 IE 中的所有设置以允许来自任何站点的 cookie。我是否需要更改 cookie 选项之一或向 cookie 添加除“MaxAge”之外的其他内容,以便 IE 接受它?提前致谢。


您可能需要在选项中定义 cookie 的路径。 以下选项结构应该可以解决问题:

session.Options = &sessions.Options{
    Path: "/performance",
}

该选项将 cookie 的可用性限制为整个页面的给定路径 使用"/".

请注意,max-age设置是IE 不支持 http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx:

[...] Internet Explorer(包括 IE8)不会尝试支持 cookie 的任何 RFC。 WinINET(IE 下面的网络堆栈)具有基于 RFC 之前的 Netscape cookie 草案规范的 cookie 实现。这意味着任何版本的 Internet Explorer 都不支持 max-age、版本化 cookie 等指令。

顺便说一下,你不需要MaxAge对于会话 cookie(来自IE Cookie 手册 http://msdn.microsoft.com/en-us/library/ie/ms533693%28v=vs.85%29.aspx):

(expires=date;)
    If you set no expiration date on a cookie, it expires when the browser 
    closes. If you set an expiration date, the cookie is saved across browser 
    sessions. If you set an expiration date in the past, the cookie is deleted. 
    Use Greenwich Mean Time (GMT) format to specify the date.

所有主流浏览器都应该如此。

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

Internet Explorer 中的 Go 和 Gorilla 会话 的相关文章

  • Console.log在IE中刚刚输出的对象上[object Object]

    我习惯在 Chrome 或 Firefox 中调试 JavaScript 只是因为它们内置的开发工具比 IE 干净得多 IE8 随着开发者工具的完善而出现 但它们仍然没有完全达到标准 我喜欢能够像在 Visual Studio 中一样单步执
  • Golang SSL TCP套接字证书配置

    我正在创建一个 Go TCP 服务器 不是 http s 并且尝试将其配置为使用 SSL 我有一个 StartCom 免费 SSL 证书 我正在尝试使用它来完成此任务 我的服务器代码如下所示 cert err tls LoadX509Key
  • IE6 支持任何 HTML5 元素吗?

    IE6 支持任何 HTML5 元素吗
  • 终止用户会话

    我有 3 个标签 主页 选项卡 1 选项卡 2 当用户启动应用程序时 它会定向到 主页 选项卡 我使用以下命令创建一个新会话HttpSession session request getSession 当用户浏览到其他选项卡时 我使用以下方
  • 如何在 PHP 中正确启动会话?

    我最近正在学习有关如何为我的网站制作自定义 CMS 的教程 我目前正在制作后端 以便用户可以创建和编辑页面 该教程有点旧 因此各种功能已被弃用 我能够修复大多数问题 除了 session register 功能 我在很多网站上看到 包括这个
  • IE 和 Socket.io 兼容性

    我做了一些聊天示例 如下所示 http psismike com 2011 09 node js and socket io chat tutorial http psitsmike com 2011 09 node js and sock
  • 非本地包中的本地导入

    我知道应该避免本地进口 但在这种情况下有特殊情况需要 这是一个私人仓库 heroku buildpack 在go get 由于服务器上缺少私钥 与绝对 URL 一起使用时会出现此阶段 现在我得到这个错误local import in non
  • document.domain 更改后无法在 IE 中访问 about:blank iframe

    有谁知道创建一个about blankIE 中页面上的 iframe 时document domain已经改变 IE 似乎不允许在之后访问空 动态 iframedocument domain财产已被改变 例如 假设您正在动态创建一个 ifr
  • 如何最大限度地减少 Go 中的垃圾收集?

    有时您可能想避免 最小化垃圾收集器 所以我想确定如何做到这一点 我认为下一个是正确的 在函数的开头声明变量 使用数组代替切片 还有吗 为了最大限度地减少 Go 中的垃圾收集 您必须最大限度地减少堆分配 为了最大限度地减少堆分配 您必须了解分
  • 如何检查 Laravel 中是否设置了 cookie?

    我已经用我的控制器制作了一个 cookie 这似乎有效 因为如果我在开发人员工具中检查我的资源 它就在那里 但现在我想在我的视图中对其进行操作 但这似乎不起作用 这是我在我的视图中使用的代码 if Cookie get cookiename
  • Django:设置为 30 秒后过期的 Cookie 实际上会在 30 分钟后过期?

    这是我的代码 def update session request if not request is ajax or not request method POST return HttpResponseNotAllowed POST u
  • 查找导致 Chrome SameSite 警告的 cookie

    正如你们中的一些人所知 Chrome 将于本月开始使用新的 SameSite cookie 政策 https web dev samesite cookies explained https web dev samesite cookies
  • 在 JavaScript 中获取当前会话值?

    我有一个场景 我在浏览器中打开 Web 应用程序 但在两个单独的选项卡中 在一个选项卡中 我从应用程序注销 因此所有会话值都变为空 在另一个选项卡中 我单击了网络应用程序中的锚标记 在锚标记的 jquery on click 事件中 我检查
  • go语言读取并合并两个Yaml文件

    假设我们有两个 yaml 文件 master yaml someProperty someVaue anotherProperty anotherValue 覆盖 yaml someProperty overriddenVaue 是否可以解
  • cookie 未在跨域上设置 - AngularJS 和 NodeJS/Express

    跨域请求时未设置 cookie 我的服务器在 localhost 8000 中运行 客户端在 localhost 9000 中运行 服务器nodejs express上的cors设置是 app use function req res ne
  • Go中通过反射给struct成员赋值

    我有一个结构 v 其中包含成员 A B C 字符串 使用反射 我可以获得字段的名称及其值 typ v Type for i 0 i lt v NumField i gets us a StructField fi typ Field i f
  • 如何解决[从不设置cookie的域提供以下静态资源]

    我正在为一些我根本不知道的事情而挣扎 当我 ping 我的网站时 我得到了这个结果 Serve the following static resources from a domain that doesn t set cookies 而且
  • 重定向后丢失会话变量

    用户填写用户名和密码 如果正确 页面会加载一些信息 例如user id到会话变量 该脚本制作了一个header Location 重定向 不知何故 下一页无法识别会话 怎么会 重定向到同一个域 并且所有页面都有session start 我
  • IE8/9 - CSS 文件的最大字节数

    我目前正在开发的应用程序有过多的 CSS 样式 我们似乎已经达到了 IE8 9 以及它可以加载的 CSS 数量的某种限制 在某些时候 它会停止解释 CSS 从而破坏某些页面上的样式 我们正在使用 Combres 来压缩 缩小导致 CSS 文
  • 我可以显示我在 PHP 中设置的所有 cookie 吗?

    我正在尝试诊断 cookie 中的错误 但 cookie 的名称不是应有的名称 PHP 有没有办法打印我的域设置的所有 cookie 你有没有尝试过 print r COOKIE

随机推荐

  • ruby on Rails 中的 url 编码等效项

    Ruby on Rails 2 3 5 中是否有与 PHP 的 urlencode 等效的代码 它对要在 URL 的查询部分中使用的字符串进行编码 我用谷歌搜索了它 但所有答案似乎都可以追溯到 2006 年之前 而且似乎有日期 这就是我发现
  • 在 Mac 上安装适用于 Python 的 Gtk 3

    我已经使用 homebrew 安装了 python gtk3 但它打印 警告 gtk 3 3 14 6 已安装 但是当我尝试在 python 中导入它时 from gi repository import Gtk 它给出了错误 导入错误 没
  • WebView 文本大小

    有时 当我加载页面 没有静态内容 动态构建 时 我看到字体太小1 http s8 postimage org 7akrcd8wl webview1 png 如果我重新加载 我会正确看到它2 http s7 postimage org cp6
  • 如何按照我们设置的顺序从本地存储中检索数据

    我正在通过循环遍历顶部菜单 对象数组 来读取 json 文件并将项目取出并将其存储到本地存储中 一切正常 甚至数据也存储在本地存储中 但我的问题是它按排序顺序将数据存储在 localStorage 中 这可能是其默认行为 但我不需要按排序顺
  • Python 访问字典列表中的字典

    您好 我有下面的字典 它有一个带有列表的值 列表内有一个字典 有没有办法使用键而不是列表索引来调用列表内的字典值 列表内的字典可能会有所不同 因此索引值可能并不总是提供正确的键值对 但如果我能够使用密钥 我总能获得正确的值 mylist m
  • 请求的资源上不存在“Access-Control-Allow-Origin”标头。与 github 站点

    http kingdiepie github io testing html http kingdiepie github io testing html XMLHttpRequest 无法加载https docs google com s
  • 在 PostgreSQL 和 Ruby on Rails 中使用间隔

    我想从 Rails 应用程序将持续时间 2 天 5 年 保存为 PostgreSQL 中的间隔 uration min 和uration max 都是 2 天 或 5 年 之类的值 因此它们各自都是一个间隔 def change creat
  • 如何防止控件改变Z顺序?

    我在 Net 中有用户控件 我在 WndProc 中使用命中测试 以允许在运行时使用鼠标调整其大小 问题是 命中测试成功后 按下鼠标 拖动以调整大小 释放鼠标 控件会按 Z 顺序向上跳跃并破坏其在窗体中的位置 我需要命中测试 因为它是一个非
  • 在 Jupyter 笔记本中使用 pandas 导入 csv 文件时出现 FileNotFoundError

    import pandas as pd df pd read csv home josepm Documents test ver2 csv FileNotFoundError Traceback most recent call last
  • 如何在javascript中检查日期是否在本周?

    我有这个日期 2016 04 23T11 45 00Z 我想在本周检查这个日期吗 Thanks 日期很难 我总是建议使用专用于日期处理的库 因为它可以减少代码中出现错误的机会 MomentJS http momentjs com 是一个很好
  • Notepad++ 将打开文档中的两行替换为其他 (10) 行

    我想用 Notepad 中的其他行替换两行 主要问题是我无法复制所有应该替换的行 如果我将所有行粘贴到 替换为 输入字段中 则只会将第一行插入该字段中 看来换行符没有正确复制 选择应插入 查找内容 字段中的行 带有换行符 非常容易 因为我可
  • 子子域上的通配符 SSL [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们有一个通配符 SSL 证书 domain example 并拥有一个网站sub1 sub2 domain example macOS 上的 Saf
  • 加密云中的 HBase 静态数据

    我对 HBase 还很陌生 并被分配了一项将我们的基础设施迁移到云的任务 我们的 HBase 数据包含一些客户信息 因此需要在静态时进行加密 我已经在读这个了 静态数据的透明加密 http hbase apache org book ch0
  • Scrapy,start_url 限制

    我想知道是否有数量限制start urls我可以分配给我的蜘蛛吗 据我搜索 似乎没有关于列表限制的文档 目前我已经设置了我的蜘蛛 以便列表start urls从 csv 文件中读取 网址数量约为 1 000 000 个 本身没有限制 但您可
  • 为什么要分块写入 Stream?

    我想知道为什么这么多例子将字节数组读入卡盘中的流中 而不是一次全部读入 我知道这是一个软问题 但我很感兴趣 我对硬件有一些了解 并且填充缓冲区可能非常依赖于大小 并且您不想再次写入缓冲区 直到它被刷新到需要去的任何地方等 但是使用 Net平
  • nginx 错误:/etc/nginx/nginx.conf:76 中不允许使用“location”指令

    当我使用 sudo service nginx restart 重新启动 nginx 时 我面临这个错误 重新启动 nginx nginx emerg location 指令在 etc nginx nginx conf 76 中不允许 ng
  • 备份/恢复 AzureDevOps [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用的是 AzureDevOps 环境https dev azure com xxx https d
  • 如何在 C# 中读取 .xls 和 .xlsx 和 .xlsm 文件

    我使用 openfiledialog 并过滤它以获取 xls 和 xlsx 和 xlsm 文件 但我不知道下一步该做什么 我构建了一个具有名字和姓氏的工人类 我想从 Excel 文件中获取数据并将其放入变量中 这是我的 openfiledi
  • 如何在Golang中使用GORM for Mongodb?

    我是新来的go and MongoDB 我想使用 GORM 连接到 MongoDBgo lang 经过大量搜索 我仍然无法做到 简而言之 你不能 GORM http gorm io MongoDB 是为关系型数据库而创建的 MongoDB
  • Internet Explorer 中的 Go 和 Gorilla 会话

    我正在使用 Go 制作一个简单的 Web 应用程序 使用 gorilla 进行会话和路由 使用 Mustache 进行模板 我在登录时遇到问题 我相信是 IE 接受 cookie 的问题 该问题仅出现在 Internet Explorer