标签: session-variables

Google App Engine - 使用Python 2.7获取会话

首先,我对GAE来说是全新的,所以我可能会以错误的方式做到这一点 - 但我之前使用过的是PHP,会话是我保持持久数据的方式.我正在使用Python 2.7,因为这是我用于所有其他Python开发的东西 - 尽管我开始怀疑降级到2.5是否可能是一个有效的解决方案,如果不是理想的解决方案.

场景是我正在构建一个概念验证站点,我需要一个"虚拟"登录按钮,它只需设置一个名为'user'的会话变量,其值为'admin'.然后我想检查导航模板以查看变量是否已设置,如果是,我将添加一些额外的菜单命令.非常简单. (注意:我知道这不安全,不合理或者应该做的任何事情 - 问题是会话不起作用,而不是我正在做的事情 - 我在代码中使用其他一些东西session - 部署时没有一个工作正常

似乎有一些不同的会话库用于GAE与Python,我尝试了谷歌搜索中最广泛推荐的那个 - gaeutilities,但是这会导致错误并且不起作用(我最终偶然发现这篇文章解释它只是与Python 2.7不兼容).再多一点搜索引导我从appenginelearn.com浏览这个库,我把它放进去并且它完美地工作......直到我部署它 - 然后它什么也没做.我会喜欢一些指示或建议,为什么这可能会失败.这是我正在使用的相关代码:

我将appenginelearn.com的util库目录放在应用程序目录的根目录中,然后导入Session:

from util.sessions import Session
Run Code Online (Sandbox Code Playgroud)

然后我添加了Login和Logout类:

class LogIn(webapp2.RequestHandler):
    def get(self):
        self.session = Session()
        self.session['user'] = 'admin'
        # Return the user to the page they logged in from
        referer = self.request.environ['HTTP_REFERER'] \
                if 'HTTP_REFERER' in self.request.environ \
                else '/'
        self.redirect(referer)

class LogOut(webapp2.RequestHandler):
    def get(self):
        self.session = Session()
        self.session.delete_item('user')
        self.redirect('/')
Run Code Online (Sandbox Code Playgroud)

主类中的以下(可怕)代码(这将在演示中的所有页面完成)

class MainPage(webapp2.RequestHandler): …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine session-variables python-2.7

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

是否有可能"盗用"会话变量(我不想知道如何)

我目前在php中做一个网站,我们使用Session变量来存储每个用户的权限级别.

例如,如果您中的任何一个人进入网站,您将自动获得值为"member"的会话变量.

我要问的是:攻击者是否有可能进入网站并修改"admin"而不是"member"的会话变量的值

我不是在问,如果可能的话,如果是这样,攻击者需要什么样的特殊访问权限(例如:访问代码,......)

我有一个替代解决方案,可以用一个随时间过期的令牌替换权限值.

第二种解决方案实施起来的时间更长.

谢谢你的帮助!

php security session session-variables

10
推荐指数
1
解决办法
1979
查看次数

从控制器重定向初始化不起作用

我有控制器的覆盖,检查是否存在某些会话数据.存储库正常工作需要此数据,因此如果它不存在,则在检查之后应该注销用户.

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if (Session["CompanyID"] != null)
    {
        repo.CompanyID = (long)Session["CompanyID"];
    }
    else
    {
        RedirectToAction("LogOff", "Account");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样,但即使调用RedirectToAction,控制器仍会打开默认操作,用户也不会注销.你能推荐一下如何处理这个问题吗?

我正在以这种方式使用这个会话数据,因为这是我知道的第一个地方,在这里我可以检查这个特定的数据是否存在.它是在用户登录时写入的.

此数据是数据库中User的一部分.我已经成为自定义成员资格和角色提供者.有没有办法将这些数据以某种方式添加到MembershipUser类型的"User"中,以便可以在构造函数中访问用户用户名?

asp.net-mvc controller asp.net-membership session-variables asp.net-mvc-3

10
推荐指数
1
解决办法
8007
查看次数

在多个子域之间共享会话变量

我有一个网站www.example.com.这将有多个子域,可以与单个应用程序或程序一起使用.例如,login.example.com将允许用户登录该站点,而system.example.com将允许用户访问信息系统,而forums.example.com将允许用户访问论坛.

我们可能需要在子域之间传递信息,例如用户ID或用户首选项等.我们如何使用SESSION变量在sudomains之间传递信息?

编辑:我喜欢这个想法:

作为脚本中的第一件事:

ini_set('session.cookie_domain', '.example.com' ); 
Run Code Online (Sandbox Code Playgroud)

php subdomain session-variables

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

如何使用php在同一主机上管理两个不同网站的单独会话状态

我目前正在开发两个网站,并通过连接调试它们localhost.

引用第一个站点,引用http://localhost/web1第二个 站点http://localhost/web2.

我为每个创建了一个登录脚本,其中设置了三个特定于域的会话变量,例如:

  1. $_SESSION['web1_user']
  2. $_SESSION['web1_login']
  3. $_SESSION['web1_sessionID']

但是,当我在同一浏览器上登录这两个站点时,然后注销一个站点(触发,我也会自动从第二个站点注销).session_destroy()

关于如何解决这个问题的任何想法都将非常感激.:(

php session-variables session-state session-cookies

10
推荐指数
1
解决办法
5127
查看次数

无法检测Session变量是否存在

我正在尝试确定Session变量是否存在,但我收到错误:

System.NullReferenceException:未将对象引用设置为对象的实例.

码:

    // Check if the "company_path" exists in the Session context
    if (System.Web.HttpContext.Current.Session["company_path"].ToString() != null)
    {
        // Session exists, set it
        company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
    }
    else
    {
        // Session doesn't exist, set it to the default
        company_path = "/reflex/SMD";
    }
Run Code Online (Sandbox Code Playgroud)

那是因为Session名称"company_path"不存在,但我无法检测到它!

c# asp.net session session-variables nullreferenceexception

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

跨Web应用程序共享SQL Server会话状态

我正在设置SQL Server会话状态的一个非常基本的演示,但在使其工作时遇到一些麻烦.我正在尝试使用IIS 7.5和SQL Server 2008 R2在本地运行Windows 7进行测试.

最终,我需要一种方法来跟踪登录到几个不同Web服务器之间负载平衡的系统的用户数量.因此,每次用户登录或注销时,我都需要更新会话变量(存储在SQL中).因此会话ID可能总是不同的.这可能吗?

这是我到目前为止所做的:

  1. 在IIS中创建了两个新站点(Site1和Site2)
  2. 在VS 2010中创建了两个新的Web应用程序项目(Site1和Site2)
  3. 在这两个站点中,在Default.aspx页面上,我创建了一个按钮,单击该按钮时会将"Site1"或"Site2"(取决于站点)保存到名为"LastSiteUsed"的会话变量中.还有另一个按钮,单击该按钮时,将从"LastSiteUsed"会话变量中读取值并将其显示在标签中.
  4. 在SQL中,我创建了一个名为dbSessionTest的新数据库.然后我按照MSDN上的说明使用aspnet_regsql工具安装会话状态数据库.
  5. 在我的两个Web应用程序的Web.config文件中,我添加了以下内容<System.Web>:

<sessionState mode="SQLServer" sqlConnectionString="server=.\sqlexpress;database=dbSessionTest;uid=myUsername;pwd=myPassword" cookieless="false" timeout="20" allowCustomSqlDatabase="true"/>

两个站点都正常运行,但它们似乎没有共享会话.例如,当我单击我的按钮从Site1保存我的会话变量时,我希望能够从Site2读取该值,但它不起作用.Site2只返回"Site2",Site1只返回"Site1".

有没有人对我可能做错了什么有任何想法?我错误地认为我应该能够从Site2读取Site1设置的值吗?

更新:

我可以看到会话数据存储在ASPStateTempSessionsSQL Management Studio 的表中,但每个站点仍然只能看到它编写的值.两个站点都设置会话变量,如下所示:

Session("LastSiteUsed") = "Site2"
Run Code Online (Sandbox Code Playgroud)

这两个网站都在检索如下值:

lblValue.Text = "Value from Session: " & Session("LastSiteUsed").ToString
Run Code Online (Sandbox Code Playgroud)

我是否需要以不同方式访问存储在SQL Server中的会话变量?

更新2:

我已经尝试使用默认数据库ASPState,它是通过运行此命令创建的:

aspnet_regsql.exe -S MyServerName -E -ssadd -sstype p
Run Code Online (Sandbox Code Playgroud)

然后简化我的每个Web.config文件,如:

<sessionState mode="SQLServer" sqlConnectionString="Data Source=.\sqlexpress;User ID=myUsername;Password=myPassword" cookieless="false" timeout="20"/>
Run Code Online (Sandbox Code Playgroud)

但同样,没有运气.我希望能够从Site1设置会话变量,然后从Site2读取值,但它不起作用.再一次,我能够看到ASPStateTempSessions表格中显示的条目,所以我知道它们输入正确.我注意到的一件事是他们有不同的会话ID?

有什么我需要做的不同,以确保在设置/读取相同的会话变量时我的网站之间使用相同的会话ID?

更新3:

我按照本文中的说明修改了SP并添加了一个用于分组的ASPStateTempApplications列.这种方式 …

sql-server asp.net session-variables session-state iis-7.5

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

根据自定义条件防止单个会话到期?

我正在研究的网站非常以数据为中心.有些报告需要一个多小时才能完成.每当用户提交报告请求时,都会创建一个生成报告的新线程.然后,用户将被重定向到一个页面,该页面显示正在进行的报告,并请刷新以下载报告.如果用户再次刷新页面并且报告仍在进行中,则会显示相同的消息; 否则提供下载链接.

所有报告/用户关系都保存在应用程序变量中.这工作正常,除非用户处于非活动状态超过20分钟(正在处理报告时),然后用户退出; 如果用户再次登录,仍可以下载报告.

我不想增加会话到期时间,但如果用户在后台进行了某些操作,我需要停止过期,例如正在处理的报表.

在Session_End中,我能够检索userid并匹配它Application["work"]以查看用户是否有待处理的工作.

但是,在上述情况下,如何推迟会话结束,我一无所知?


编辑:每个人都建议从"维护联系人"到"使用查询字符串"作为解决方法."保持联系"对我来说看起来最有希望,但在以下情况下失败了:a.当浏览器关闭/计算在午餐期间进入待机模式等时.当用户访问另一个nonasp.net部分(它是遗留站点)时.

是不是可以取消Session_End活动本身?

c# asp.net session-variables session-state global-asax

10
推荐指数
2
解决办法
2050
查看次数

将布尔值转换为会话变量

关于如何将代码中的"可食用"转换为会话以在不同页面上显示为标签的任何想法.将非常感谢帮助.

标签将显示消息,如是可以吃

代码吼叫

public int totalCalories()
        {
            return grams * calsPerGram;
        }
        public string getFruitInfo()
        {
            string s;
            if (edible == true)
            {
                s = fName + " is good and it has " + totalCalories() +
 "calories";
            }
            else
            {
                s = "Hands off! Not edible";
                //edible = Sesion ["ediblesesion"] as bool;
                // Session ["ediblesession"] = edible;
            }
            return s;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# asp.net boolean session-variables visual-studio-2010

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

MySQL删除会话变量

情况:MySQL查询使用从外部传递的值.这是通过声明和初始化会话变量来完成的,该会话变量在会话结束前一直有效:

SET @id = 0;

SELECT * FROM my_table
WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)

问题:在查询完成后删除会话变量是一个好习惯(出于安全原因)?最合适的方法是什么?

研究:我发现了以下建议,但有一些疑问,因为它看起来像"uninitialise",而不是像"undeclare":

SET @id = NULL;
Run Code Online (Sandbox Code Playgroud)

mysql session-variables

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