Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何依赖会话_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 我应该如何依赖会话

C# 我应该如何依赖会话,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我使用session做两件事: 跟踪要为特定公司加载的css文件。 跟踪跟踪我们所在公司的公司Id Guid。 我看到这有时是空的,但我没有得到一个一致的问题来追踪。我毫不怀疑这可能是我的代码中我需要追踪的东西,但这让我想到了关于会话的问题 我是否非常依赖会话在屏幕之间传递信息? 它是一致的吗? 什么可以在页面加载之间清除它? 会话是否容易被用户清除? 我应该用其他更可靠的东西吗? 我担心我会把它搬到生活中使用,并有各种各样的问题 我只是这样做: Session["Css"] = css; 以

我使用session做两件事:

跟踪要为特定公司加载的css文件。 跟踪跟踪我们所在公司的公司Id Guid。 我看到这有时是空的,但我没有得到一个一致的问题来追踪。我毫不怀疑这可能是我的代码中我需要追踪的东西,但这让我想到了关于会话的问题

我是否非常依赖会话在屏幕之间传递信息? 它是一致的吗? 什么可以在页面加载之间清除它? 会话是否容易被用户清除? 我应该用其他更可靠的东西吗? 我担心我会把它搬到生活中使用,并有各种各样的问题

我只是这样做:

Session["Css"] = css;
以同样的方式阅读:

css = Session["Css"]
更新

我正在使用的会话:


HttpSessionStateBase控制器会话有几种类型的会话状态。InProc、StateServer和SqlServer。我认为违约是在过程中。您可以在MSDN和上阅读更多关于此的信息

其中每一个都将遵守web.config文件中定义的sessionState的超时值。对于我通常使用的单服务器设置,我的sessionState设置通常如下所示:

<sessionState 
    mode="StateServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    timeout="2880" />
这与Forms Auth的默认超时相同,因此只要我的用户对cookie/session进行身份验证,我的会话就会一直存在。这将要求您将ASP.NET状态服务器上的启动设置为自动。下面是我解释这些类型及其潜在缺点的高级过程

默认模式 每次应用程序池回收web应用程序的工作进程时,都会重置此设置。我相信这就是发生在您身上的事情,这就是为什么您的会话变量在看似随机的时间为空

状态服务器 这将在apppool回收中保持状态,但需要启用ASP.NET状态服务器服务,并将其启动类型更改为自动

如果有一个web场或多个web服务器处理该网站,则可能会遇到问题,除非运行专用的状态服务器

这要求存储在会话变量中的变量是[可序列化的]

SQLServer 这将把会话变量持久化到SQL数据库中,通常是web服务器场情况下的最佳方法


这要求存储在会话变量中的变量是[可序列化的]。

有几种类型的会话状态。InProc、StateServer和SqlServer。我认为违约是在过程中。您可以在MSDN和上阅读更多关于此的信息

其中每一个都将遵守web.config文件中定义的sessionState的超时值。对于我通常使用的单服务器设置,我的sessionState设置通常如下所示:

<sessionState 
    mode="StateServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    timeout="2880" />
这与Forms Auth的默认超时相同,因此只要我的用户对cookie/session进行身份验证,我的会话就会一直存在。这将要求您将ASP.NET状态服务器上的启动设置为自动。下面是我解释这些类型及其潜在缺点的高级过程

默认模式 每次应用程序池回收web应用程序的工作进程时,都会重置此设置。我相信这就是发生在您身上的事情,这就是为什么您的会话变量在看似随机的时间为空

状态服务器 这将在apppool回收中保持状态,但需要启用ASP.NET状态服务器服务,并将其启动类型更改为自动

如果有一个web场或多个web服务器处理该网站,则可能会遇到问题,除非运行专用的状态服务器

这要求存储在会话变量中的变量是[可序列化的]

SQLServer 这将把会话变量持久化到SQL数据库中,通常是web服务器场情况下的最佳方法


这要求存储在会话变量中的变量是[可序列化的]。

您是否可以按照这些思路编写方法来获取CSS

GetCss() {

    var css = (CastToYourTypeHere)Session["css"];

    if(css == null) {

        //do whatever you'd normally do here to set the css, 
        //e.g. get the users guid and find their company css, and set css equal to it
        css = myHypotheticalGetCssBasedOnTheUserFunction();

    }

    return css;

}
通过这种方式,您可以覆盖其中的所有基础,您可以愉快地使用会话,如果会话由于任何原因丢失,您只是在运行初始的“getCssForThisUser”类型代码


依我看,会话对于您所描述的示例类型中的每一个页面之间的每个用户来说都是一种保存此类数据的好方法。

您是否可以按照这些思路编写获取CSS的方法

GetCss() {

    var css = (CastToYourTypeHere)Session["css"];

    if(css == null) {

        //do whatever you'd normally do here to set the css, 
        //e.g. get the users guid and find their company css, and set css equal to it
        css = myHypotheticalGetCssBasedOnTheUserFunction();

    }

    return css;

}
通过这种方式,您可以覆盖其中的所有基础,您可以愉快地使用会话,如果会话由于任何原因丢失,您只是在运行初始的“getCssForThisUser”类型代码


依我看,在您所描述的示例类型中,会话是在页面之间为每个用户保存此类数据的一种不错的方式。

您使用的是什么会话状态模式?会话确实会在一定时间后过期。此外,如果应用程序池回收或IIS重置,则会话数据在进程中存储时将丢失。如果您使用的是负载平衡器,会话信息可以

如果负载平衡器没有粘性,你可能会迷失方向。我说,使用cookie-我看不到会话的优势,它会更可靠-看看现在所有使用cookie的网站。@Hogan看不到会话优于cookie或其他方式的优势?@ErocM-我说,使用cookie-我认为cookie比会话更好变量,因此看不到使用会话变量的优势。即使是Microsoft的工具也使用cookies-了解ASP.NET中的StateBag您使用的会话状态模式是什么?会话确实会在一定时间后过期。此外,如果应用程序池回收或IIS重置,则会话数据在进程中存储时将丢失。如果您使用的是负载平衡器,如果负载平衡器没有粘性,会话信息可能会丢失。我说,使用cookie-我看不到会话的优点,它会更可靠-现在看看所有使用cookie的网站。@Hogan看不到使用会话而不是cookie的优点,或者反过来说?@ErocM-我说使用cookie-我认为cookie更好而不是会话变量,因此看不到使用会话变量的优势。甚至微软的工具也使用cookies——阅读ASP中的StateBag。NET@Nate关于用cookies代替会话,你有什么想法?我的想法是你应该用cookies代替会话。@DarinDimitrov:我知道。我只是想看看他的观点。硬币的两面。。你知道,嗯。。。写actually@ErocM我使用cookie作为在用户会话期间存储内容的一种快速方法,例如要呈现的.css文件等。当服务器代码和javascript都需要cookie时,我通常使用cookie。主要原因是,使用状态服务器或sql server时会话很容易,它们可以持久化。我从来没有遇到过任何问题。也就是说,其他人说他们有问题,从不使用它们。也许他们的网站比我的网站更大,使用率也更高,我不知道,他们会把会话状态压到极限。我知道我使用它们。我正在开发的应用程序现在使用了3个会话变量,所以我想我会谨慎使用它们。@Nate你对使用cookies代替会话有什么想法?我的想法是你应该使用cookies代替会话。@DarinDimitrov:我知道。我只是想看看他的观点。硬币的两面。。你知道,嗯。。。写actually@ErocM我使用cookie作为在用户会话期间存储内容的一种快速方法,例如要呈现的.css文件等。当服务器代码和javascript都需要cookie时,我通常使用cookie。主要原因是,使用状态服务器或sql server时会话很容易,它们可以持久化。我从来没有遇到过任何问题。也就是说,其他人说他们有问题,从不使用它们。也许他们的网站比我的网站更大,使用率也更高,我不知道,他们会把会话状态压到极限。我知道我使用它们。我正在开发的应用程序现在使用了3个会话变量,所以我想我使用它们是比较节省的。