分享

PHP类范围

 印度阿三17 2019-06-11

我是PHP的新手.在整个PHP应用程序中控制对类的访问的最佳方法是什么?在整个应用程序中需要访问这些类的最佳位置在哪里?例;我有一个在登录过程中创建的用户类,但每次页面发布时都会显示该对象已重新初始化.

我试图设置属性IsLoggedIn,然后每次再次创建对象之前检查该变量,但这似乎不起作用.我还试图在PHP中使用isSet函数来查看类变量是否已经存在

解决方法:

你是对的,你的申请状态不会从请求转到请求.

与桌面应用程序相反,Web应用程序不会保持初始化状态,因为服务器每次都可以成为另一个访问者时,需要完全不同的东西.您知道谁在使用桌面应用程序,但您不一定知道谁在请求该页面.想象一下,10个用户在您的Web应用程序上同时执行不同的操作?您不会为每个访问者保持整个应用程序的运行.想象一下有10,000名访客……

有一些方法可以将一些数据从请求保留到请求.每次都会重新初始化应用程序,是的,但是您可以重新加载您正在执行的操作的状态.它始终围绕相同的一般方法:

>饼干; Cookie是一个保存在客户端的小文件,每个请求都可以提供哪些内容.在PHP中,这可以使用$_COOKIE variable.在所有情况下,您可以serialize您的类实例并在之后重新加载它们.问题是,您不希望将敏感数据放在那里,因为任何(恶意)机构都可以看到并修改它.
> POST或GET;在每个请求中,您传递$_GET request中的状态(URL,例如http://localhost/myscript.php?iamatstep=4.或通过$_POST,例如使用表单中的隐藏输入字段.此数据可以加密,只对您有意义,但仍然是,将敏感数据放回客户端,任何人都可以摆弄它.
>数据库,磁盘;或者服务器上的任何其他内容.同样,您在文件中序列化数据,例如在请求结束时准备好再次用于下一个请求.它的主要优点是它可以保留在您的服务器上.缺点是,此时,您不知道要为哪个请求提取哪些数据,因为您的应用程序可能同时存在多个用户…

这就是$_SESSION的概念发挥作用的地方.它只是一种同时使用所有这些的打包方式.这并不像初学者经常感觉到的那样神奇.当您使用会话时,放入$_SESSION的数据存储在服务器上的某个位置(通常是临时目录中的文件,尽管可以将其更改为其他类似数据库),并且会将唯一ID归因于此会话并传递在cookie中,将跟随访问者请求请求.因此,客户端唯一的问题是cookie中的大数字.在下一个请求中,浏览器告诉服务器上的PHP它的会话号为12345,如果存在,则加载相应的文件,然后再次提供数据.如果没有启用cookie,它可以通过GET或POST传递,但通常最好不要去那里(见session.use_trans_sid’s note).

在您的每个页面上,您通常需要进行身份验证.

<?php

// verify if we have a current session
if (isset($_SESSION['login'])) {
  // get data in current session
  $username = $_SESSION['login']['username'];
  $isLoggedIn = $_SESSION['login']['isLoggedIn'];
} else {
  $username = '';
  $isLoggedIn = false;
}

// take care of the unauthorized users
if (!$isLoggedIn) {
  // maybe a redirection here...
}

// do the things a logged in users has the permission to do

并设置会话,它可能看起来像这样:

<?php

// handle the form post of your login page for example
if (isset($_POST['username']) && isset($_POST['password'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];
  // verify the username and password against a database
  if ($everythingIsOkay) {
    // we can consider this user logged in and create a session
    $_SESSION['login']['username'] = $username;
    $_SESSION['login']['isLoggedIn'] = true;
    // and now maybe redirect the user to the correct page
  }
}
// raise an error about an invalid login

最后,也许是一个logout.php页面可以做类似的事情:

<?php

unset($_SESSION['login']);
// redirect the user to the login page
来源:http://www./content-1-238351.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多