当前位置: 首页 > 知识库问答 >
问题:

会话在新页面视图中被破坏

单于庆
2023-03-14

成功登录后,我将保存会话变量。

用户转到应用程序中的不同页面时,会话就消失了,即使我没有显式地销毁会话。我该怎么解决这个问题?

这是一个会话似乎消失的页面。

<?php
include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];
$getUser = mysql_query("SELECT * FROM users WHERE user_id = ".$uid);

$user_info = array();

while($currentRow = mysql_fetch_array($getUser)){
    $user_info['firstname'] = $currentRow['first_name'];
    $user_info['lastname'] = $currentRow['last_name'];
    $user_info['username'] = $currentRow['username'];
}
?>

core/init.php中,我有会话开始方法。

<?php
session_start();
require 'database/connect.php';
require 'functions/users.php';
require 'functions/general.php';

if (logged_in() === true) { 
$user_data = user_data($_SESSION['user_id'],'first_name','last_name','username');
}

$errors = array();
?>

共有2个答案

袁文景
2023-03-14

您应该尝试为所有这些使用不同的名称,因为我认为将会话中使用的值用于另一个值(因为这将替换您的旧值)并在下次访问该页面时使会话消失不是一个好的做法。会话只创建一次。

<?php
include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];
$getUser = mysql_query("SELECT * FROM users WHERE user_id = ".$uid);

$userinfo = array(); //I changed $user_info to $userinfo so it doesn't get mixed with the session.

while($currentRow = mysql_fetch_array($getUser)){
    //I removed the underscore
    $userinfo['firstname'] = $currentRow['first_name'];
    $userinfo['lastname'] = $currentRow['last_name'];
    $userinfo['username'] = $currentRow['username'];
}
?>

现在应该没事了,尽管我还没有测试过。我只是将数组更改为$userinfo,这样您仍然可以在任何时候使用会话,而不会将其与某些内容混合在一起。

巫马瀚漠
2023-03-14

session_start()根据通过GET或POST请求传递或通过cookie传递的会话标识符创建会话或恢复当前会话。(访问PHP:session_start)

在每页的开头添加session\u start()(在

在您的情况下:

<?php
if(!isset($_SESSION)) session_start(); //--> ADD this line

include 'core/init.php';
include 'core/sendmessage.php';
$user_info = $_SESSION['user_id'];

...

 类似资料:
  • 我ogin.php 指数php 我做了一个登录脚本,打开,如果密码是正确的,我ndex.php网站。当第一次通过登录脚本打开ndex.php网站时,一切正常,会话设置完毕。但是在我刷新页面后,会话会被破坏,并且没有设置。那么我如何保存会话,这样它就不会因为刷新浏览器而被破坏呢?

  • 下面是Spring3.x和Hibernate3.x上的一个假设情况 我在Spring有一个服务层,它调用3个DAO来构建一个模型。DAO 是事务性的(@Transactional),并且具有延迟加载的Hibernate集合。 该服务方法会导致一些更新,以及数据的获取。 典型的DAO方法如下- 我有以下关于OSIV的问题 - 1.在默认的AUTO模式下,此会话刷新(数据库更新)多少次? 2.是否可以

  • 我必须添加一个WordPress安装到我的CodeIgniter系统,所以我把它放在一个名为的子图中,并在我的中排除了该文件夹。一切都很好。 我已经将所有的WordPress表和放在我的CodeIgniter数据库中,前缀为。 我现在已经将WordPress博客头文件加载到,就像这样; 并在我的控制器中创建了一个注册方法,以实际链接到我的。我这样做是因为我想使WordPress登录/注册过时,并从

  • 我使用CXF Servlet公开了一些REST服务。然而,我遇到了这样的问题:一个类需要一个延迟加载的集合(不止一个列表)。我得到了这个: 我的cxf配置相当简单: 如何实现“在视图中打开会话”模式,以便在 Jackson 序列化对象时我的Hibernate会话可用?

  • 问题内容: 在我的本地路由http:// localhost:9000 /#/ deviceDetail /中, 我有一个控制器来管理该视图。在进入该视图之前,我将一些变量设置为( 例如)。 一旦进入该视图,我就可以访问仪表盘属性,但是例如当我用键刷新页面时,该属性仪表盘就会丢失。 我试图将localSave变量保存,但是该方法遇到了循环引用问题。 有什么技巧可以解决吗? 问题答案: Angula

  • 问题内容: 我听过关于此主题的不同回答,那么销毁PHP会话的肯定方法是什么? 在最简单的情况下,这是否足以真正终止用户与服务器之间的会话? 问题答案: 要销毁会话,您应该采取以下步骤: 删除会话数据 使会话ID无效 为此,我将使用以下代码: 为了确保会话ID无效,您应该只允许脚本启动的会话ID。因此,设置一个标志并检查它是否被设置: 此外,您可以使用此时间戳定期交换会话ID,以缩短其寿命: