【发布时间】:2014-07-30 21:16:25
【问题描述】:
好的,我有一个关于 php 会话的奇怪问题。我正在使用会话跨页面传输信息。我的问题是,在某些情况下(通常是十分之一)我收到一条错误消息:PHP Notice: Undefined index: $myVar.有趣的是,会话在应用程序的第一部分持续存在,然后似乎消失了。
流程如下。
- 用户登陆登录页面,输入用户密码后点击提交。
- 应用程序转到收集信息并使用数据类收集和存储信息的控制页面。
- 数据类将信息存储到一个数组中,然后将该数组放入会话中,
- 然后控制页面使用该信息发送电子邮件,并将用户转发到欢迎页面。
- 电子邮件使用会话变量以及欢迎页面。即使欢迎页面没有,电子邮件也始终包含信息。
这是欢迎页面的顶部,会话开始是第一行。
<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="./rmilogo.png" type="img/png" />
<title>Welcome!</title>
这是控制页面
<?php
session_start();
function getDealer() {
require '../data/DealerDB.php';
$action = filter_input(INPUT_POST, 'response');
$dealerID = filter_input(INPUT_POST, 'dCode');
new DealerDB('****************', $dealerID);
$cmpDealer = $_SESSION['dealer'];
if (!$cmpDealer['dCode'] == '' || !is_null($cmpDealer['dCode'])) {
require '../business/AutoEmail.php';
try{
new AutoEmail($action, $cmpDealer['dCode']);
}catch(Exception $e) {
trigger_error('Message: ' . $e->getTraceAsString());
}
header("Location: http://www.*******.com/welcome.php");
} else {
header("Location: http://www.*******.com/error.html");
}
}
getDealer();
再次从页面顶部开始会话。 这是数据检索类的顶层。
<?php
session_start();
$_SESSION['dealer'] = null;
require '../business/Dealer.php';
class DealerDB {
private $host;
private $user;
private $passkey;
private $db;
function __construct($db, $dealerCode) {
$this->host = '*******';
$this->user = '*******';
$this->passkey = '*******';
$this->db = $db;
$_SESSION['dealer'] = $this->buildDealer($dealerCode);
}
再次从顶部开始会话, 这里的问题是,当控制类调用电子邮件时,它会起作用,而且大多数时候会话转移到下一页也是如此。但是,有时会话变量不会持续存在并且信息会丢失并且在程序的其他任何地方都找不到,我只是得到一个 $mySessionVar is not set 错误。
【问题讨论】:
-
@shudder 这真是太棒了,有趣的是我直到我尝试切换服务器并理解了这个问题才意识到这个问题,我会回答我自己的问题让所有人看到所以检查一下在下面
标签: php session session-variables