gpt4 book ai didi

c# - Redis session 状态提供程序 - 设置操作区分大小写?

转载 作者:可可西里 更新时间:2023-11-01 11:20:59 25 4
gpt4 key购买 nike

前段时间我们将生产转移到使用 Redis 缓存作为 ASP.NET session 存储,我们注意到 Redis session 提供程序处理 session 键的方式有非常奇怪的行为。

迁移后我们注意到的问题是:Session["test"]Session.Clear()清除后仍然有值,肯定是特定于提供者,因为故障回复到 InProc session 存储解决了这个问题。

在底部您可以找到 Redis 状态,这是下面列出的代码的结果,它会在使用 Session 的操作上产生意外的行为,例如 Session.Clear(),或简单的 session 项目检索;这种状态从定义上看似乎是错误的,因为Session State's keys are case insensitive .

一般问题:经过少量调查后,我们意识到 Redis session 提供程序将处理 session 键以以区分大小写的方式设置数据,这与 session 数据检索不同。因此,可以为任何字符串(长度为 n)创建最多 2^n 个不同大小写的键,并且它们将被分开存储,导致其检索思想 Session 对象的未定义行为,特别是如上所述的奇怪行为。

如何实现: 创建 ASP.NET Web Forms 应用程序,添加 Microsoft.Web.RedisSessionStateProvider NuGet 包(最新版本 - 1.6.5)。我还使用 Azure Redis 实例 (PaaS)。

附上测试页完整代码

这是演示问题的截屏视频:http://screencast.com/t/aCuqqVau .

问题:这是设计好的还是那里有错误?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="SessionIssue.Test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server" />
<body>
<script runat=server>
protected void Step1_Click(object sender, EventArgs e)
{
Session["Test"] = "Y";
}

protected void Step2_Click(object sender, EventArgs e)
{
Session["test"] = "X";
}

protected void Clear_Click(object sender, EventArgs e)
{
Session.Clear();
}

protected override void OnPreRender(EventArgs e)
{
lbTest.Text = string.Format("{0}", Session["test"]);
}
</script>

<form id="form1" runat="server">
<div>
Session["test"]=<asp:Label ID="lbTest" runat="server" />

<br />

<asp:Button ID="btStep1" runat="server" Text="Step1" OnClick="Step1_Click" />
<asp:Button ID="btStep2" runat="server" Text="Step2" OnClick="Step2_Click" />
<asp:Button ID="btClear" runat="server" Text="Clear" OnClick="Clear_Click" />
</div>
</form>
</body>
</html>

Redis state

最佳答案

关于c# - Redis session 状态提供程序 - 设置操作区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com