我是PHP的新手.在整个PHP应用程序中控制对类的访问的最佳方法是什么?在整个应用程序中需要访问这些类的最佳位置在哪里?例; 我有一个在登录过程中创建的用户类,但每次页面发布时都会显示该对象已重新初始化.
我试图设置属性IsLoggedIn,然后每次再次创建对象之前检查该变量,但这似乎不起作用.我还试图在PHP中使用isSet函数来查看类变量是否已经存在
你是对的,你的申请状态不会从请求转移到请求.
与桌面应用程序相反,Web应用程序不会保持初始化状态,因为服务器每次都可能成为另一个访问者时,需要完全不同的东西.您知道谁在使用桌面应用程序,但您不一定知道谁在请求该页面.想象一下,10个用户在您的Web应用程序上同时执行不同的操作?您不会为每个访问者保持整个应用程序的运行.想象一下有10,000名访客......
有一些方法可以将一些数据从请求保留到请求.每次都会重新初始化应用程序,是的,但是您可以重新加载您正在执行的操作的状态.它始终围绕相同的一般方法:
饼干; Cookie是一个保存在客户端的小文件,每个请求都可以提供哪些内容.在PHP中,这可以使用$ _COOKIE变量.在所有情况下,您都可以序列化类实例并在之后重新加载它们.问题是,您不希望将敏感数据放在那里,因为任何(恶意)机构都可以看到并修改它.
POST或GET; 在每个请求中,您传递$ _GET请求中的状态(URL,例如http://localhost/myscript.php?iamatstep = 4.或者通过$ _POST,例如使用表单中的隐藏输入字段.此数据可以加密,只对你有意义,但是,你仍然把敏感数据放回客户端,任何人都可以摆弄它.
数据库,磁盘; 或者服务器上的任何其他内容.同样,您在文件中序列化数据,例如在请求结束时准备好再次用于下一个请求.它的主要优点是它可以保留在您的服务器上.缺点是,此时,您不知道要为哪个请求提取哪些数据,因为您的应用程序可能同时存在多个用户...
这就是$ _SESSION的概念所在发挥作用.它只是一种同时使用所有这些的打包方式.这并不像初学者经常感觉到的那样神奇.当您使用会话时,放入$ _SESSION的数据存储在服务器上的某个位置(通常是临时目录中的文件,尽管可以将其更改为其他类似数据库的内容),并且将唯一ID归于此会话并传递在cookie中,将跟随访问者请求请求.因此,客户端唯一的问题是cookie中的大数字.在下一个请求中,浏览器告诉服务器上的PHP它的会话号为12345,如果存在,则加载相应的文件,然后再次提供数据.如果没有启用cookie,它可以通过GET或POST传递,但通常最好不要去那里(参见session.use_trans_sid的注释).
在您的每个页面上,您通常需要进行身份验证.
并设置会话,它可能看起来像这样:
最后,也许是一个logout.php页面可以做类似的事情: