标签: session-variables

为什么HttpContext.Current.Session在Global.asax中为null?

我正在使用VS2010并创建了一个简单的asp.Web表单应用程序,使用Development Server对其进行测试.
我尝试在会话中存储用户数据 - 从sql server查询 - 因为我不想在每个请求中访问数据库.我正在使用'Application_AuthenticateRequest'和'Session_Start'方法.
第一轮:调用AuthenticateRequest.运行以下代码:

public static void Initialize(string login_name, bool force_refresh)
    {
      HttpSessionState Session = HttpContext.Current.Session;
      object o = Session == null ? null : Session["EMPLOYEE_DATA"];
      if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
      {
        _current = UIManager.GetEmployee(login_name);
        if (Session != null)
        {
          Session["EMPLOYEE_DATA"] = _current;
        }
      }
      else
      {
        _current = (Employee)o;
      }
    }
Run Code Online (Sandbox Code Playgroud)

_current变量是通过静态属性发布的私有静态字段.在第一轮中,Session是null,我认为没关系,因为Session_Start尚未调用.Session_Start看起来像这样:

protected void Session_Start(object sender, EventArgs e)
{
  Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
Run Code Online (Sandbox Code Playgroud)

在下一轮中,当然没有调用Session_Start,但在AuthenticateRequest中我无法访问会话.HttpContext.Current.Session为null,this.Session引用抛出HttpException,表示"会话状态在此上下文中不可用". …

asp.net session-variables global-asax

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

PHP每个用户多个并发会话

我正在使用Apache上的PHP开发Web应用程序.$ _SESSION变量对于必须在页面中保持不变的信息使用得相当多.

我们需要每个用户能够打开多个并发会话,作为新选项卡或新窗口,具体取决于他们选择的浏览器.现在,当用户打开添加选项卡或窗口并转到站点时,将采用现有会话.如何防止这种情况,以便用户必须(或可能)登录并启动新会话,而不会干扰他们已经打开的任何现有会话?

我们的临时解决方法是使用多个浏览器(IE和FF),但这显然不是一种非常理想的做事方式.

php session-variables multiple-instances

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

Spring 3.0设置并获取会话属性

我想从会话范围中读取域对象(UserVO).

我在名为WelcomeController的控制器中设置UserVO

@Controller
@RequestMapping("/welcome.htm")
public class WelcomeController {
@RequestMapping(method = RequestMethod.POST)
    public String processSubmit(BindingResult result, SessionStatus status,HttpSession session){
      User user = loginService.loginUser(loginCredentials);
     session.setAttribute("user", user);
         return "loginSuccess";
    }
}
Run Code Online (Sandbox Code Playgroud)

我能够在jsp页面中使用该对象 <h1>${user.userDetails.firstName}</h1>

但是我无法从另一个Controller中读取值,

我正在尝试读取session属性,如下所示:

@Controller
public class InspectionTypeController {
@RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
 public String addInspectionType(InspectionType inspectionType, HttpSession session)
 {
           User user = (User) session.getAttribute("user");
           System.out.println("User: "+ user.getUserDetails().getFirstName);

        }
} 
Run Code Online (Sandbox Code Playgroud)

java spring session-variables

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

PHP会话变量未使用ajax保留

我有一个单页网站,使用AJAX加载新的PHP文件并更新显示.

我在主页面上启动我的php会话但是当我使用ajax更新内部html时,我需要为正在加载的新php文件使用这些会话变量.

这篇文章与此类似:PHP会话变量未保留.但我检查了我的php.ini有session.use_cookies = 1

主页PHP:

<?php 
session_start();
if(isset($_SESSION['views']))
{$_SESSION['views']=$_SESSION['views']+1;}
else
{$_SESSION['views']=1;}
?>
Run Code Online (Sandbox Code Playgroud)

用户输入之后我使用ajax来调用php文件并加载页面的子部分:

<?php    
if(isset($_SESSION['views']))
    { echo "Views: " . $_SESSION['views'];} 
    else 
    { echo "Views: NOT SET";}
?>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我,我错过了哪一个重要的步骤?谢谢.

更新:在对主页和子页面添加session_id()调用后,我看到两个页面都具有相同的Session_ID.但是它仍然无法拉取会话变量,如果我确实为它赋值,则两个相同名称的会话变量保持彼此独立.

回答这个问题创建的问题: 我发现我必须在php.ini文件中设置静态session_save路径.对于大多数付费虚拟主机服务,他们只有一个会话的默认容器,但它受负载平衡的影响.真是个好主意.

php ajax session-variables

14
推荐指数
2
解决办法
4万
查看次数

会话变量不工作php

以下是我的登录页面的代码,其中登录脚本检查用户的真实性,然后使用标题功能重定向到收件箱页面.

<?php
session_start();

include_once('config.php');
$user=htmlentities(stripslashes($_POST['username']));
$password=htmlentities(stripslashes($_POST['password']));
// Some query processing on database    

if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){
$_SESSION['loggedIn'] = 'yes';
    header("Location:http://xyz/inbox.php?u=$id_user_fetched");
    //echo 'Login Successful';
    }else{
        echo 'Invalid Login';
        echo'<br /> <a href="index.html">Click here to try again</a>';
        }
}else{
    echo mysqli_error("Login Credentials Incorrect!");
    }
?>
Run Code Online (Sandbox Code Playgroud)

inbox.php页面如下所示:

<?php
session_start(); 
echo 'SESSION ='.$_SESSION['loggedIn'];
if($_SESSION['loggedIn'] != 'yes'){
echo $message = 'you must log in to see this page.';
//header('location:login.php');
}
 //REST OF THE CODE

?>
Run Code Online (Sandbox Code Playgroud)

现在使用上面的代码,inbox.php总是显示输出:SESSION =您必须登录才能看到此页面.这意味着没有设置会话变量或者inbox.php无法检索会话变量.我哪里错了?

php session session-variables

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

Asp.net会话变量

我有一个带有c#代码的asp.net项目.我有一个名为GlobalVariable的静态类,我存储了一些信息,例如当前选择的产品.

但是,我看到当有两个用户使用该网站时,如果有人更改了所选产品,则会为每个人更改.静态变量似乎与每个人都是共同的.

我想创建(来自c#代码)某种会话变量,它只使用c#代码,但不仅来自页面,而且来自任何类.

c# asp.net session-variables

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

PHP - 会话无法在移动设备上运行

对于登录我使用a session_start(),对于桌面它的工作正常,但在移动设备上,它不起作用.session_id()例如,当我使用变量时,session_id('login')它可以在移动设备上运行,但在其他计算机上打破其他会话.但是当session_id()自动生成时,它在移动设备上不起作用.我该怎么办?

我在index.php上的session_start代码

session_start();
if (isset($_SESSION['username'])){
    session_id();
}
Run Code Online (Sandbox Code Playgroud)

login.php文件的整个代码

<?php
require('config.php');
$usernameOK = false; $passwordOK = false;
if (isset($_POST['username']) and isset($_POST['password'])){

        $username = $_POST['username'];
        $password = $_POST['password'];

        $UserQuery = "SELECT username FROM `members` WHERE username='$username'";
        $userTestResult = mysqli_query($connection, $UserQuery);
        $usernameTEST = mysqli_num_rows($userTestResult);
        if($usernameTEST == 1){$usernameOK = true;}

        $PasswordQuery = "SELECT password FROM `members` WHERE username='$username'";
        $result = mysqli_query($connection,$PasswordQuery);
        $row = mysqli_fetch_row($result);

        if (password_verify($password, $row[0])){$passwordOK = true;}

        if($usernameOK == true && $passwordOK == true){ …
Run Code Online (Sandbox Code Playgroud)

php session session-variables

13
推荐指数
2
解决办法
4943
查看次数

输出后没有写入PHP会话(外部ajax调用上的echo或print_r)

我在调试这个特殊问题时遇到了一些麻烦,我希望有人知道我做错了什么.

我有一个自定义CMS系统工作,它使用Paragraph作为构建块,使用Ajax(prototypejs)调用和按预定顺序解析HTML块的函数进行更新,清理它们并将这些数据保存在Session变量的关联数组中.用户登录,会话已创建,我可以在我需要的每个页面中检查此会话而不会出现问题.该系统直接在最终网站上运行,因此用户可以实时查看他的更新并按照普通用户的方式浏览网站,但需要进行编辑.所以,这里没什么新鲜的.但这是奇怪的事情.

编辑模式下的最终用户站点(管理员用户已登录):路径"/"

验证记录状态后,函数处理可编辑内容并将关联数组保存到会话中,它还会启动一些javascript对象以编辑每个段落.数据实际上已保存,我可以使用外部脚本检查这个PHP脚本结束后是否存在.如果我加载新页面(新内容),会话更新新数据)

管理员用户使用Inplaceeditor修改段落,此HTML块通过Ajax发送到启动命名会话的php脚本,读取当前会话数据,检查是否应修改,附加或删除段落,并将值重新分配给现有数组键在$_SESSION.如果我在分配新数据之后创建了一个var_dump()o print_r.$_SESSION之后脚本回显处理过的html,ajax更新调用页面上的原始段落.

此脚本位于/admin/cms/...etc中,这意味着站点根目录中至少有4个目录.

当脚本结束时,我检查使用相同的会话转储脚本来查看数据是否真的被写入/提交,但是没有,$_SESSION只有来自调用页面的原始数据.相同的ID,相同的会话名称,相同session_start()但没有数据写入.这整个操作非常快,所以我可能会遇到速度问题,脚本会在session_write_close可以完成之前结束.

但是,如果我向$_SESSION数组添加一个新密钥并在其中放入一些数据,则会更新和写入数据.如果我没有在这个脚本上输出任何内容,只是处理数据和设置会话变量,它也会得到更新和编写.

就像$_SESSION数组的某些成员被阻止更新一样.

我做了什么来跟踪这个错误,我确定我没有做错.

  • 1.- register_globals当然没有了
  • 2.- session_name()并且session_start()始终以给定的
    顺序存在.我曾经
    session_start()在同一页面
    上使用多个-close 来使用多个命名会话,但为了改进问题,这不再是这样.
  • 3.-我session_write_close()在会话数据处理后使用.也
    试过没有,让php决定何时提交数据,但没有运气.
  • 4.-我只使用SID的cookie.
  • 5.-会话存储在/ tmp,我可以看到数据更新.
  • 我也尝试在DB上使用自定义保存处理程序,但同样的问题,
    "_write"仅在没有输出时才被调用.
  • 我搜索了这个主题的php.net,stackoverflow,谷歌等.我从不问过没有调查,这是我多年来的第一次......但它只是如此不合逻辑,它必须是一个没有想到的小事.

最奇怪的是,当我只处理没有输出的数据时,$_SESSION可以更新.但是如果我之后通过添加输出并再次尝试来修改此脚本,而不是仅仅显示新的(最后一个)值,我将获得原始值,即在第一个位置由调用页面创建的值,有时在玩了几个之后倍!PHP无法缓存脚本之间的值或?我没有全局化.

我真的很无能为力.这个系统在PHP4.3上运行完美,因为我使用5.3.3两个飞蛾我的用户在哪里调用数据混淆,所以我检查了,是的,有严重的问题.今天我更新到(5.3.6)并且我无法提交此会话值.

通过Ajax调用的脚本代码:

<?
session_cache_limiter('nocache'); 
session_name("CMS_ses");
session_start();
include('../htmLawed/htmLawed.php');
include("utils_cms.php");
include("../../../php/utils_array.php");

$value=$_POST['value'];
$editorId=$_POST['editorId'];
$clase=$_POST['clase'];
$editorId=str_replace("pre","",$editorId);
$value=html_entity_decode(stripslashes($value),ENT_QUOTES);
if (strlen(trim($value))==0)
    {
    die();
    }
$value="<div id=\"$editorId\"  class=\"$clase\">$value</div>";

$newXHTML=$value;
$retorno=CMS_nuevoBloque($newXHTML,$editorId);
$_SESSION['data']['CMSeditores']=$retorno[1];   
$_SESSION['data']['CMScont']=$retorno[2];   
session_write_close();

print_r($retorno[0]); //Offending …
Run Code Online (Sandbox Code Playgroud)

php ajax session session-variables

12
推荐指数
1
解决办法
2010
查看次数

如何让我的会话写入apache

我最近切换了服务器,现在我的主页无法正常工作.它给出了以下文字:

Warning: session_start() [function.session-start]: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in /var/www/vhosts/alt.alternativedc.com/httpdocs/index.php on line 6

Warning: Unknown: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

我认为这意味着会话文件夹不可写,因此我在ssh-ed进入服务器后运行以下命令:

chmod o+rw /var/lib/php/session
Run Code Online (Sandbox Code Playgroud)

这似乎没有解决问题.不知道现在该怎么办......

php apache session-variables

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

Cookie与基于会话的Flash消息

我在CakePHP中找到的一个很好的功能是能够设置flash消息,比如说某些save脚本,然后在下一页显示该消息.像Post updated,或者Error - no file found.

Cake所做的就是这个session对象.我试图避免像瘟疫这样的会议,因为他们对可扩展性的要求很高.我是否可以简单地将Flash消息存储在cookie(客户端)中,然后在下一页显示后删除该cookie?这种方法的优点/缺点是什么 - 或者更简单地说,为什么Cake使用session(我假设这与_SESSION集合有关).

干杯!

ps在我的实现中,我也使用setTimeoutjavascript中的命令淡出.我发现这是结束整个过程的好方法.

php cookies cakephp session-variables

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