PHP中如何将“对象”存储在$ _SESSION中?

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

我只是想到,实际上可以将对象存储在$ _SESSION中因为当我跳到另一个页面时,我仍然有我的对象。现在,在我开始使用这种方法之前,我想知道这是否真的是一个好主意,或者是否有潜在的陷阱

我知道,如果我有一个单一的入口点,我不需要这样做,但是我还没到那里,所以我没有一个入口点,我真的很想保留我的对象,

所以简而言之:在会话中存储对象是否可行,是否有任何问题?

此昵称已隐藏_此昵称已隐藏_提问于
rg759955努力前行的程序员回答于

只要在进行session_start()调用的时候就可以了,否则它将无法从会话存储中反序列化对象。

猪猪3516347回答于

session的用处就不用说了。 一般情况下,session里只需要保存一些基础类型的数据,字符串之类的。但如果想将自己定义的一个类保存,则分几个步骤: 1)得到类; 2)序列化类; 3)session赋值; 4)得到session,并解析得到类;

代码如下: 现有一自定义类:User.php

<?php
     private name;
     private age;
     public function getName(){
         return "String:".$this->name;
     }
     public function User($name,$age){
         $this->name = $name;
         $this->age = $age;
     }
?>

1)得到类: nowUser=newUser(“some”,22);2)序列化类:saveUser = serialize(nowUser);3)session赋值:_SESSION["User"] = saveUser;//当然,可以将第二步和这一步放在一起,不用中间变量:saveUser; 4)得到session,并解析得到类; 在另一页面中:include(“User.php”);myUser=unserialize(_SESSION[“User”]);

两个重要的步骤就是序列化和反序列化。因为要保存的对象是自定义的,所以session不知道以什么格式来保存,所以将它序列化成字符串,这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。只要在要用的时候以该类的结构来解析就行了。当然,在解析之前要先引入那个类。不然在解析的时候会报错,因为还没引入,结构就无从说起。

所属标签

可能回答问题的人

  • 云存储

    腾讯云 · 云存储 (已认证)

    16 粉丝0 提问0 回答
  • galenye

    腾讯 · 工程师 (已认证)

    5 粉丝0 提问38 回答
  • Jinqn

    腾讯 · 高级工程师 (已认证)

    19 粉丝0 提问60 回答
  • 腾讯云技术服务团队

    腾讯云 · 技术服务团队 (已认证)

    25 粉丝0 提问7 回答
  • 宝哥@devops运维

    腾讯 · 高级云计算工程师 (已认证)

    76 粉丝0 提问0 回答
  • elliswu

    腾讯计算机系统有限公司 · 高级工程师 (已认证)

    5 粉丝0 提问0 回答

扫码关注云+社区

领取腾讯云代金券