PHP:使用类对象维护会话数据
我是一名PHP OOP新手,目前正在学习。我创建了一个session类,它应该检查session变量PHP:使用类对象维护会话数据,php,session,object,Php,Session,Object,我是一名PHP OOP新手,目前正在学习。我创建了一个session类,它应该检查session变量$\u session['userID']是否已设置,并将登录状态设置为true;以及设置用户id。还有一个函数,setVars(),用于在调用时设置其他对象属性: session.php <?php class Session { public $log_in_status=false; public $userID; public $fname; public $class_i
$\u session['userID']
是否已设置,并将登录状态设置为true;以及设置用户id。还有一个函数,setVars()
,用于在调用时设置其他对象属性:
session.php
<?php
class Session
{
public $log_in_status=false;
public $userID;
public $fname;
public $class_id;
public $email;
public function __construct()
{
session_start();
if ($_SESSION['userID'])
{
$this->log_in_status = true;
$this->userID = $_SESSION['userID'];
}
else
{
$this->log_in_status = false;
unset($_SESSION['userID']);
}
}
public function setVars($classID, $email, $fname)
{
$this->class_id = $classID;
$this->email = $email;
$this->fname = $fname;
}
}
$session = new Session();
//--------------------------------------------
<?php
# page2.php
require_once("init.php");
?>
<!DOCTYPE html>
<html>
<head>
<title>Testing sessions</title>
</head>
<body>
<?php
echo "Page 2 <br> <br>";
echo "objectClassID: " . $session->class_id . "<br>";
echo "objectEmail : " . $session->email . "<br>";
echo "objectFname : " . $session->fname . "<br> <br>";
echo "<a href='page1.php'>Go to Page 1</a>";
?>
</body>
</html>
测试会议
如何使page2.php能够显示
$session
对象属性?如果要跨页面持久化变量,需要将它们存储在$\u session
数组中。比如说
<?php
class Session {
public $log_in_status = false;
public $userID;
public $fname;
public $class_id;
public $email;
public function __construct() {
session_start();
if (isset($_SESSION['userID'])) {
$this->log_in_status = true;
$this->userID = $_SESSION['userID'];
}
$this->class_id = isset($_SESSION['class_id']) ? $_SESSION['class_id'] : null;
$this->email = isset($_SESSION['email']) ? $_SESSION['email'] : null;
$this->fname = isset($_SESSION['fname']) ? $_SESSION['fname'] : null;
}
public function setVars($classID, $email, $fname) {
$this->class_id = $_SESSION['class_id'] = $classID;
$this->email = $_SESSION['email'] = $email;
$this->fname = $_SESSION['fname'] = $fname;
}
}
$session = new Session();
我强烈建议删除最后一行文件的结束PHP标记(即?>
)。请参见,对于您的问题,您从未在会话中存储变量在会话中没有OOP迹象。它是伪装成OOP的过程编程。删除会话
类,它是无用的,直接使用$\u Session[]
您的代码将更小、更快、更易于阅读和理解。明白了!谢谢你,我想强调一下在上面的答案中反复使用的isset
。这将帮助您防止大量警告和运行时问题。
<?php
# page2.php
require_once("init.php");
?>
<!DOCTYPE html>
<html>
<head>
<title>Testing sessions</title>
</head>
<body>
<?php
echo "Page 2 <br> <br>";
echo "objectClassID: " . $session->class_id . "<br>";
echo "objectEmail : " . $session->email . "<br>";
echo "objectFname : " . $session->fname . "<br> <br>";
echo "<a href='page1.php'>Go to Page 1</a>";
?>
</body>
</html>
<?php
class Session {
public $log_in_status = false;
public $userID;
public $fname;
public $class_id;
public $email;
public function __construct() {
session_start();
if (isset($_SESSION['userID'])) {
$this->log_in_status = true;
$this->userID = $_SESSION['userID'];
}
$this->class_id = isset($_SESSION['class_id']) ? $_SESSION['class_id'] : null;
$this->email = isset($_SESSION['email']) ? $_SESSION['email'] : null;
$this->fname = isset($_SESSION['fname']) ? $_SESSION['fname'] : null;
}
public function setVars($classID, $email, $fname) {
$this->class_id = $_SESSION['class_id'] = $classID;
$this->email = $_SESSION['email'] = $email;
$this->fname = $_SESSION['fname'] = $fname;
}
}
$session = new Session();