PHP的新功能,在各种OOP教程之后遇到了一些我不知道如何解决的问题。 Home.php
<?php
//echo '<img src="'.'uploads/photo.jpg'.'"alt="aaaaaa" style="width:256px;height:128px">';
include_once "classes.php";
$_SESSION['UserProfilePicture']=$user->getUserProfilePicture();//Dodging errors
echo '<img src="'.$_SESSION['UserProfilePicture'].'"id="HOMEPROFILE" alt="No Profile Found" style="width:128px;height:128px"><br>';
?>
UserLogin.php
<?php
include_once "classes.php";
if(!isset($_SESSION)){
session_start(); //This is necessary above every file that uses session variables!
}
if(isset($_POST['UserMailLogin']) && isset($_POST['UserPasswordLogin'])){//Grab by name
$user = new user(); //Adds an object
$user->setUserMail($_POST['UserMailLogin']);
$user->setUserPassword(sha1($_POST['UserPasswordLogin']));
if($user->validlogin()==true){
$_SESSION['UserName']=$user->getUserName();//Use -> when left is object, :: otherwise, => to assign key-value pairs in assoc array
$_SESSION['UserMail']=$user->getUserMail();
$_SESSION['UserId']=$user->getUserId();
$_SESSION['Age']=$user->getUserAge();
$_SESSION['UserLocation']=$user->getUserLocation();
$_SESSION['UserProfilePicture']=$user->getUserProfilePicture();
}
}
?>
我创建了一个启动会话的简单登录系统。当在名为users的类中创建一个新的$ user对象时,我设置/获取了为该对象提供其正确值的函数。同时,还设置了$ _SESSION超全局变量。这需要他们到主页。在Home.php上,我想访问$ user-&gt; getUserProfilePicture(),它可以正常工作,但是在刷新时它似乎无法找到对象$ user。我尝试使用$ _SESSION来解决这个问题,但这只会延迟问题,以后我想显示其他人的个人资料图片,如果我退出并重新登录并刷新它仍然有同样的问题。请帮我找一个保持对象$ user的方法。提前谢谢。
编辑: 对不起家伙我试图删除不必要的东西,但我确实有(!isset($ _ SESSION))session_start();在每一页的开头
答案 0 :(得分:0)
我相信要工作,你需要在每个页面上重新创建$ user。一旦您远离创建它的登录页面,该对象将被销毁。
如果您将用户ID存储在数据库中,请尝试仅使用用户ID创建用户对象,这样您就不必在会话中保留密码以重新创建它。
另一个选项是在会话中存储所需的用户值,并仅使用它们而不是依赖于$ user对象。
还要确保使用会话在每个页面上调用session_start()。
答案 1 :(得分:0)
我建议您在开始时学习程序编程,因为最初OOP没有意义。为什么需要开销来运行一个小脚本?你没有!
同时使用require_once();
代替任何包含,以避免任何和所有相关的头痛。
对于会话,理想的做法是将有限的数据存储在集中的会话中,这样您就不必考虑它。
require_once会话文件中的某些内容,用于检查用户是否有会话,如果有,则执行操作。然后,您可以依赖所有地方的数据。
要回答您的问题,此行会阻止您的会话填充,除非有提交内容:
if(isset($_POST['UserMailLogin']) && isset($_POST['UserPasswordLogin'])){//Grab by name
您想要的工作原型: 如果您可以将会话数据限制为准系统并使用每个脚本根据id加载用户数据,否则您将为高额会话开销付出代价。
<?php
session_start();
// do all your require_once here.
$aPost = $_POST;
$aPost[ 'username' ] = 'coolcat';
$aPost[ 'password' ] = 'dontchangeme';
if( !empty( $aPost[ 'username' ] ) && ( !empty( $aPost[ 'password' ] ) ) )
{
// Authenticate user object here and see if they can be 'logged in'
// Stubbing out section.
$oUser = new stdClass;
$oUser->username = 'coolcat';
$oUser->email = 'cool@cat.com';
$oUser->id = 99;
$oUser->age = 13;
$oUser->location = 'NYC';
$oUser->photo = 'coolcat.jpg';
$_SESSION[ 'userid' ] = $oUser->id;
}
// If we have a 'logged in' user show them stuff.
if( !empty( $_SESSION[ 'userid' ] ) )
{
echo 'You\'re logged in!';
}
var_dump( $_SESSION );
?>