是否应该首先将课程存储在会话中尚无定论。对于我提出问题的应用程序,我选择不将课程塞进会话中,这真的没有必要,我很懒惰。制定这种管理会话的方法一直都是值得的,因为它在 Web 开发中困扰了我一段时间。
我的研究结果是编写一个静态类来管理我的会话变量。这个类处理对会话的所有读取和写入,并保持它们都是强类型的,以便我启动。它一直困扰着我在整个地方使用重复的代码来进行会话废话。也减少了拼写错误。
我在此找到了两篇我喜欢的文章,我现在只能找到其中一篇,当我找到另一篇时会包括在内。
第一个是在Code Project
这可能是第二个链接
该模式简单明了。我还为从 url 查询字符串中获取参数的请求构建了一个类。我也没有理由不将其扩展到 cookie。
这是我第一次使用该模式,我只使用字符串,所以私有方法有点受限,但是可以很容易地更改为使用任何类或原始类型。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
namespace BDZipper.Site
{
/// <summary>
/// This class maintains all session variables for us instead of handeling them
/// individually in the session. They are also strongly typed.
/// </summary>
public static class SessionManager
{
# region Private Constants
// Define string constant for each property. We use the constant to call the session variable
// easier not to make mistakes this way.
// I think for simplicity, we will use the same key string in the web.config AppSettings as
// we do for the session variable. This way we can use the same constant for both!
private const string startDirectory = "StartDirectory";
private const string currentDirectory = "CurrentDirectory";
# endregion
/// <summary>
/// The starting directory for the application
/// </summary>
public static string StartDirectory
{
get
{
return GetSessionValue(startDirectory, true);
}
//set
//{
// HttpContext.Current.Session[startDirectory] = value;
//}
}
public static string CurrentDirectory
{
get
{
return GetSessionValue(currentDirectory, false);
}
set
{
HttpContext.Current.Session[currentDirectory] = value;
}
}
//TODO: Update to use any class or type
/// <summary>
/// Handles routine of getting values out of session and or AppSettings
/// </summary>
/// <param name="SessionVar"></param>
/// <param name="IsAppSetting"></param>
/// <returns></returns>
private static string GetSessionValue(string SessionVar, bool IsAppSetting)
{
if (null != HttpContext.Current.Session[SessionVar])
return (string)HttpContext.Current.Session[SessionVar];
else if (IsAppSetting) // Session null with appSetting value
return ConfigurationManager.AppSettings[SessionVar];
else
return "";
}
}
}