Rumah > pembangunan bahagian belakang > tutorial php > 自定义session处理方式导致加载验证码失败。

自定义session处理方式导致加载验证码失败。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-06 20:21:09
asal
1567 orang telah melayarinya

一个很抓狂的问题,搞了一个下午没弄好,请高手指教

问题是验证码存在SESSION中,能写进数据库,但是在浏览器加载不出来。

验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
自定义session处理方式导致加载验证码失败。

在BackplatformController的构造方法里调用session类

下面是自定义的session类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

<code><?php /**

 * Class SessionDBTool

 */

 

class SessionDBTool{

    private $db;    //保存数据库连接对象

    public function __construct(){

        //自定义session处理方法

        ini_set('session.save_handler','user');

        session_set_save_handler(

                array($this,'sess_open'),

                array($this,'sess_close'),

                array($this,'sess_read'),

                array($this,'sess_write'),

                array($this,'sess_destroy'),

                array($this,'sess_gc')

        );

        //开启session

        @session_start();

    }

 

    /**

     * 初始化

     */

    public function sess_open(){

        $this->db = MYSQLDB::getInstance($GLOBALS['config']['database']);

    }

 

    /**

     * 关闭

     * @return bool

     */

    public function sess_close(){

        return true;

    }

 

    /**

     * @param $sess_id

     * @return string

     */

    public function sess_read($sess_id){

        $sql="select sess_data from it_session where sess_id='$sess_id'";

        if($row=$this->db->fetchRow($sql)){

            return $row['sess_data'];

        }else{

            return '';

        }

    }

 

    /**

     * @param $sess_id

     * @param $sess_data

     */

    public function sess_write($sess_id,$sess_data){

        $expire=time();

        //存在则更新

        $sql="insert into it_session values('$sess_id','$sess_data','$expire') on duplicate key update sess_data='$sess_data',

        expire='$expire'";

        if($result=$this->db->myquery($sql)){

            return true;

        }

    }

 

    /**

     * @param $sess_id

     */

    public function sess_destroy($sess_id){

 

        $sql="delete from it_session where sess_id='$sess_id'";

        $result=$this->db->myquery($sql);

    }

 

    /**

     * @param $ttl

     * @return mixed

     */

    public function sess_gc($ttl){

        $now = time();

        $last = $now -$ttl;

        //删除过期session

        $sql = "delete from it_session where expire db->myquery($sql);

    }

}

</code>

Salin selepas log masuk
Salin selepas log masuk

下面是验证码存入session

自定义session处理方式导致加载验证码失败。

回复内容:

一个很抓狂的问题,搞了一个下午没弄好,请高手指教

问题是验证码存在SESSION中,能写进数据库,但是在浏览器加载不出来。

验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
自定义session处理方式导致加载验证码失败。

在BackplatformController的构造方法里调用session类

下面是自定义的session类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

<code><?php /**

 * Class SessionDBTool

 */

 

class SessionDBTool{

    private $db;    //保存数据库连接对象

    public function __construct(){

        //自定义session处理方法

        ini_set('session.save_handler','user');

        session_set_save_handler(

                array($this,'sess_open'),

                array($this,'sess_close'),

                array($this,'sess_read'),

                array($this,'sess_write'),

                array($this,'sess_destroy'),

                array($this,'sess_gc')

        );

        //开启session

        @session_start();

    }

 

    /**

     * 初始化

     */

    public function sess_open(){

        $this->db = MYSQLDB::getInstance($GLOBALS['config']['database']);

    }

 

    /**

     * 关闭

     * @return bool

     */

    public function sess_close(){

        return true;

    }

 

    /**

     * @param $sess_id

     * @return string

     */

    public function sess_read($sess_id){

        $sql="select sess_data from it_session where sess_id='$sess_id'";

        if($row=$this->db->fetchRow($sql)){

            return $row['sess_data'];

        }else{

            return '';

        }

    }

 

    /**

     * @param $sess_id

     * @param $sess_data

     */

    public function sess_write($sess_id,$sess_data){

        $expire=time();

        //存在则更新

        $sql="insert into it_session values('$sess_id','$sess_data','$expire') on duplicate key update sess_data='$sess_data',

        expire='$expire'";

        if($result=$this->db->myquery($sql)){

            return true;

        }

    }

 

    /**

     * @param $sess_id

     */

    public function sess_destroy($sess_id){

 

        $sql="delete from it_session where sess_id='$sess_id'";

        $result=$this->db->myquery($sql);

    }

 

    /**

     * @param $ttl

     * @return mixed

     */

    public function sess_gc($ttl){

        $now = time();

        $last = $now -$ttl;

        //删除过期session

        $sql = "delete from it_session where expire db->myquery($sql);

    }

}

</code>

Salin selepas log masuk
Salin selepas log masuk

下面是验证码存入session

自定义session处理方式导致加载验证码失败。

已经搞定了,ob缓存没有清除

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan