标签: session-variables

.NET HttpSessionState案例不敏感

使用" InProc "存储的.NET的HttpSessionState似乎将会话变量键值视为不区分大小写.例如:

session["foo"] = 1;
session["Foo"] = 2;
Trace.Write(session["foo"].ToString()); // => 2
Run Code Online (Sandbox Code Playgroud)

这种行为似乎没有记录,所以我想知道它是否仅仅是底层会话存储机制的副作用,还是故意由类本身实现的.由于C#将其他所有内容视为区分大小写,因此会话以不同的方式行事会有点令人不安.是什么赋予了?商店类型有所不同吗?是否与VB向后兼容?

.net asp.net session-variables session-state case-sensitive

20
推荐指数
1
解决办法
5339
查看次数

会话变量在页面加载之间不会持久存在

有人能告诉我为什么会话变量不在页面之间传递?他们在2天前工作.现在不是吗?有一个第三方系统根据第三方系统记录用户.我将用户定向到返回网址的登录页面.第三方系统将用户登录并传递其ID和在其末尾生成的令牌,并将其返回到我的站点,其中包含ID和URL中的令牌.

如果未设置会话,我会尝试从网址中获取ID和令牌并设置会话.(工作)我然后生成我自己的令牌来验证从第三方系统(工作)传递的令牌,当我去点击另一页时,我设置的会话不为空(????)

这是我的代码:

    <?php
    session_start();

    // FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME 
    // BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE
    function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    } else {
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
    }

    // DESTROY SESSION INFO IF TIMED OUT
    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    session_destroy(); …
Run Code Online (Sandbox Code Playgroud)

php session-variables

20
推荐指数
4
解决办法
5万
查看次数

ASP.NET MVC单元测试 - 会话

搜索了StackOverflow和谷歌我认为我正在做的事情是正确的,但结果似乎并不顺利

    [TestMethod]
    public void LoginAction_Should_Return_View_and_User_Authenticated()
    {
        // Arrange
        var mock = new Mock<ControllerContext>();
        var mockSession = new Mock<HttpSessionStateBase>();
        mock.Setup(p => p.HttpContext.Session).Returns(mockSession.Object);

        var testData = FakeUserData.CreateTestUsers();
        var repository = new FakeUserRepository(testData);
        var controller = new AccountController(repository);
        controller.ControllerContext = mock.Object;

        // Act
        var result = controller.Login("testuser1", "testuser1");

        // Assert
        Assert.AreEqual("testuser1", controller.HttpContext.Session["Username"]);
        Assert.IsTrue((bool)controller.HttpContext.Session["IsAuthenticated"]);
        Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
    }
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,controller.HttpContext.Session ["Username"]的值为null,但是我使用Session帮助器将值设置为用户名.我做错了什么,还是其他什么?任何帮助将不胜感激.

asp.net-mvc unit-testing moq session-variables

19
推荐指数
1
解决办法
1万
查看次数

我对如何使用@SessionAttributes感到困惑

我试图了解Spring MVC的架构.但是,我完全被@SessionAttributes的行为搞糊涂了.

请看下面的SampleController,它是由SuperForm类处理post方法.事实上,只是SuperForm类的字段只能像我预期的那样绑定.

但是,在我将@SessionAttributes放入Controller后,处理方法作为SubAForm进行绑定.任何人都可以解释我在这个绑定中发生了什么.

-------------------------------------------------------

@Controller
@SessionAttributes("form")
@RequestMapping(value = "/sample")
public class SampleController {

    @RequestMapping(method = RequestMethod.GET)
    public String getCreateForm(Model model) {
        model.addAttribute("form", new SubAForm());
        return "sample/input";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String register(@ModelAttribute("form") SuperForm form, Model model) {
        return "sample/input";
    }
}

-------------------------------------------------------

public class SuperForm {

    private Long superId;

    public Long getSuperId() {
        return superId;
    }

    public void setSuperId(Long superId) {
        this.superId = superId;
    }

}

-------------------------------------------------------

public class SubAForm extends SuperForm {

    private Long subAId;

    public Long …
Run Code Online (Sandbox Code Playgroud)

spring session-variables spring-mvc

19
推荐指数
1
解决办法
2万
查看次数

会话变量在哪里存储在Rails中?

硬盘,主内存或其他地方.我不是要求将这些存储在数据库中的情况.

ruby-on-rails session-variables

19
推荐指数
3
解决办法
3万
查看次数

在1页或所有页面上开始写会话?

所有教程都说要开始会话.他们没有说这应该是在网站上的所有页面,还是一些,或者只有1.

如果它只有1页,它必须是主页吗?或者我正在制作表单的页面将会话ID放在数据库中?如果访问者从不访问具有会话ID的页面但他们在网站上,他们是否还有会话ID?

php mysql session session-variables

18
推荐指数
3
解决办法
3万
查看次数

PHP中的随机会话数据丢失

这是我们过去几周一直面临的问题.

1 /我们的设置

  • PHP 5.4 + MySQL
  • 2个专用服务器,负载均衡
  • 使用memcached在2台服务器之间复制会话
  • 在这些服务器上运行的3个应用
    • 一个自定义开发的应用程序,使用默认的php会话设置
    • 另一个自定义开发的应用程序,使用不同的会话设置(cookie名称,路径)
    • 一个Wordpress CMS

2 /问题

我们的第一个应用程序出现问题.

我们的一些用户报告说他们有时会在几分钟后断开连接(当会话设置为持续3小时时).它可能会在同一天发生几次,然后几天没有断开,但问题总是会回来.到目前为止受影响的用户比例很小,但我希望在它"传播"给其他用户之前解决这个问题.

问题似乎发生在应用程序的不同位置,尽管我们已经确定了大多数错误发生的3个scenarii:

  • 一些涉及提交表单($ _SESSION变量被修改)
  • 其他只需要打开弹出页面,而不修改会话数据

我们试图重现用户描述的不同场景:有时我们已经能够,但大多数时候我们没有任何问题,这使得调试变得困难.

其他说明:

  • 问题是最近的,这个应用程序已运行多年没有任何问题.
  • 它似乎与我们的服务器负载无关,因为在夏季休息时我们的交通流量很低时问题仍然存在
  • 它一次只影响一个会话/用户:同时登录的所有其他用户都不会遇到此问题
  • 所有不同的浏览器(IE,Firefox,Chrome)出现问题

3 /技术分析

发生断开连接时,用户将被重定向到"您的会话已过期或您无权查看"页面.加载此页面后,我们会收到一封带有$ _SESSION变量转储的技术电子邮件.

当会话以正常方式到期时,我们收到的电子邮件显示$ _SESSION变量为空(正常行为).当发生意外断开时,有趣的是$ _SESSION并非完全为空:在数组包含的~20个元素中,只剩下一个(总是相同的).

因此,这意味着会话未过期,但没有足够的数据来"识别"用户,因此显示"无权限"页面.作为确认,当发生这种情况时,我们可以检查memcached,该会话仍然保存一些数据.

这些是我们到目前为止已经确定的潜在问题,以及我们为排除它们所做的工作:

  • Memcached表示70和80%之间的自由空间,所以我们认为不是问题所在.
  • 我们删除了Memcached并返回使用NFS共享目录来访问会话文件:问题实际上变得更糟.这将指出一个应用程序错误,因为NFS写入数据的速度较慢,会更频繁地发生会话丢失.
  • 我们浏览了所有讨论PHP会话数据丢失的不同论坛(包括SO),并相应地审查了我们的代码.代码库很大,但我们使用自动化工具和脚本来避免丢失文件.
    • 在每个页面的开头调用session_start().
    • 每个标题后调用exit()("Location ...")
    • register_globals是关闭的
  • 我们已经测试了我们的其他两个应用程序和有问题的应用程序之间可能的交互,尽管它们不共享任何代码,数据库或会话处理.那里没有任何东西.
  • 我们已经分析了断开连接时的访问日志,以检查行为模式:这里也没有运气.

所以我们不知道是什么导致了这个问题,因为它似乎是随机发生的,所以我的问题是:

  • 问题可能来自我们的代码:我们错过了要检查的任何内容吗?这个解决方案似乎不太可能,因为代码大部分时间都适用于所有用户,但我仍然在考虑它.
  • 问题可能来自另一个会"清空"会话变量数组部分的应用程序/进程.我们还审查了其他应用程序的代码,但没有找到任何可能导致此问题的代码.如果另一个进程正在执行此操作,为什么它只会清空一些会话而不是所有会话?

谢谢你的帮助.

php session session-variables

17
推荐指数
1
解决办法
2086
查看次数

在laravel中设置会话变量

我想用这种方式使用laravel在会话中设置一个变量

Session::set('variableName')=$value;
Run Code Online (Sandbox Code Playgroud)

但问题是我不知道在哪里放这个代码,因为我想设置它一次(当客人访问主页或任何其他页面时)?主要的想法是使用全局变量在所有应用程序控制器中使用它,我听到了与配置变量相关的东西,但我不确定使用配置变量或仅使用会话是否是一个好主意?谢谢

php session-variables application-variables laravel laravel-routing

17
推荐指数
7
解决办法
11万
查看次数

在django中测试会话变量

我遇到了Django Request.Session,我知道如何设置和测试它的特定值.

request.session['name'] = "dummy"
Run Code Online (Sandbox Code Playgroud)

我检查的某个地方

if request.session['name'] == "dummy" :
   #do something
Run Code Online (Sandbox Code Playgroud)

但是,现在我必须首先检查会话变量是否设置了?我是说如何检查是否存在价值Request.Session['name'] Is set

请任何人都可以打电话给我,有办法检查吗?

先感谢您.

django session-variables django-sessions

15
推荐指数
2
解决办法
1万
查看次数

使用State Server在不同的.NET版本之间共享会话状态

背景

  • 我们使用.NET 3.5在IIS 6(Win2003 Server)上运行一个网站:site1.mysite.local
  • 我们使用.NET 4.0在IIS 7(Win2008 Server)上运行第二个网站:site2.mysite.local

在每个站点上,web.config包含StateServer和相同的machineKey:

<sessionState mode="StateServer" stateConnectionString="tcpip=STATESRV01:42424" />

<machineKey decryptionKey="EDCDA6DF458176504BBCC720B4E29348E252E652591179E2" validationKey="CC482ED6B5D3569819B3C8F07AC3FA855B2FED7F0130F55D8405597C796457A2F5162D35C69B61F257DB5EFE6BC4F6CEBDD23A4112C4519F55185CB5EB3DFE61"/>
Run Code Online (Sandbox Code Playgroud)

我们还有一个PostRequestHandlerExecute事件处理程序来修改"NET_SessionId"cookie以具有相同的根域和路径.

cookie.Domain = ".mysite.local";
cookie.Path = "/";
Run Code Online (Sandbox Code Playgroud)

在global.asax文件中,我们有以下代码来修改Application_Start事件中的App Name:

    protected void Application_Start(object sender, EventArgs e)
    {
        string applicationName = "mysiteapp";

        // Change the Application Name in runtime.
        FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime",
            BindingFlags.Static | BindingFlags.NonPublic);
        HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
        FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId",
            BindingFlags.Instance | BindingFlags.NonPublic);

        appNameInfo.SetValue(theRuntime, applicationName);
    }
Run Code Online (Sandbox Code Playgroud)

结果

两个站点都返回相同的会话ID,但是当我们尝试在site1上设置会话值时,site2不会返回值.

站点1(site1.mysite.local)结果

Session ID (Session.SessionID): a55jnfcscxd3f0hnwoik02pp
Session Value: True
Run Code Online (Sandbox Code Playgroud)

站点2(site2.mysite.local)结果

Session ID (Session.SessionID): a55jnfcscxd3f0hnwoik02pp …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis session-variables session-state

15
推荐指数
1
解决办法
3538
查看次数