PHP不存储会话ID

时间:2017-06-09 09:54:59

标签: php mysql oop session storage

我一直默默地跟随着这里,现在我加入了自己。

我正在制作一个登录系统,纯粹是为了学习它,因为我是PHP的半新手(约2个月的最佳猜测)。

现在我收到以下错误(使用WAMP和mysql):

  

“注意:未定义的属性:stdClass :: $ id in   第44行“C:\ wamp64 \ www \ login \ classes \ user.php”

这是WAMP所说的一句话:

#!/bin/bash  
echo "This is a shell script"  
git status
git pull origin development

这是使用的put(& get)函数:

            session::put($this->_sessionName, $this->data()->id);

我的登录系统正在运行,直到此登录点,甚至哈希和所有内容。

我正在尝试存储用户的ID,以便在我想检查它是否正常运行时使用以下内容:

public static function put($name, $value){
    return $_SESSION[$name] = $value;
}

public static function get($name){
    return $_SESSION[$name];}

在我的用户类中执行此操作后:

echo session::get(config::get('session/session_name'));

它应该只给我一个用户ID(例如2,如果用户ID是2(ID是自动递增的))。 (该配置包含DB连接,会话和令牌等的基本数组。)

但事实并非如此。

我真的希望这不是一个重复的问题,因为我找不到要求这种用法的问题。

有没有人可以帮助我朝正确的方向发展?

2 个答案:

答案 0 :(得分:1)

好错误是自我解释

$this->data()中的

user.php会返回没有id

的stdClass

这是简单调试的问题,看看$this->data()返回的内容......

答案 1 :(得分:0)

我建议你使用一个带有静态成员函数的会话类,这样你就可以从任何具有类名的地方调用该方法

最重要的是 当你开始会话时使用Error Control Operator。如果会话正在进行,系统不会再次启动,错误将被忽略,所以你可以确保会话变量

例如: -

<?php

class Session
{

    public static function init()
    {  
        @session_start(); //#
    }

    public static function set($key, $value)
    {
        $_SESSION[$key] = $value;
    }

    public static function get($key)
    {

        if (isset($_SESSION[$key]))
            return $_SESSION[$key];
        else 
            return false;
    }

}

现在使用它如下: -

    <?php  
     require 'Session.php'; 
 class TestController{ 
    function setData()
    {
        Session::init(); 
        Session::set('user_id',1);//set userid to session
    }

    function getData()
    {
        Session::init(); //this also won't give you error;
        echo Session::get('user_id'); //get or retrieve userid from session
    } 
} 
?>

但在构造函数中使用Session :: init进行良好的编程实践..