服务器和请求理解

时间:2011-06-09 05:43:02

标签: php static request

我想知道服务器运行php应用程序的功能。以下是我的想法:

客户A类型www.blahblahblah.blah /

  1. 服务器解析网址和目录等。
  2. 服务器转到index.php
  3. index.php中有一个Singleton Pattern Class,其中包含一个名为instance的静态变量。现在服务器将内存分配给它自己的RAM中的静态变量,以便第一个之后的所有请求使用相同的静态变量,或者为每个新请求服务器分配一个新内存,并且新内存将分配一个新空间那个静态变量?
  4. 我的困惑:如果每个请求都在自己的内存空间中运行,那么什么是持久连接?<​​/ p>

    我想知道的第二件事:我可以有一个桌面程序,即特殊的浏览器,它会在我的Web应用程序中连续发送一个特殊的密钥,而我的Web应用程序正在连续地发送密钥以使HTTP连接完全而不是连接减 ? 。[*没有javascript浏览器连接到我的APP]。
    这样我可以确认谁作为客户端连接到我的APP而不是连接到INTERNET的人。我知道会话,但他们使http连接更少,然后有欺骗和会话劫持的机会。我知道你可以使会话安全,但我的应用程序仍然不知道客户端是否已经死亡,所以从会话中删除他的数据并告诉其他人客户端等等已断开连接。

    抱歉这个愚蠢的长篇问题。

1 个答案:

答案 0 :(得分:1)

a)服务器为每个请求处理分配一个单独的内存空间。因此,Singleton只是在单个请求的范围内的单例。关于持久连接(不确定你想到哪一个),例如MySQL的持久连接由Web服务器(例如Apache)处理 - 它为后续请求重用进程(线程),因此它能够将db连接移交给下一个请求。 (实质上,持久性和单身人士在不同的层面上发生,因此具有不同的能力)。

b)HTTP本身就是一个无连接协议,你只能通过假设事物来模拟持久性(例如,每60秒请求一次Ajax ping,当用户在超过60秒内没有显示任何活动时,你可以认为他是现在断开了)。如果您需要完全确定某人是否已连接,而不是,则需要查找套接字连接(例如Java applet)。即使这样也不能保证100%的结果,因此连接中的超时是“发明的”。

c)如果你非常担心会话劫持,你应该使用SSL(https),没有人能够弄清楚会话ID是什么(除了用户自己在浏览器中寻找cookie,但是他会劫持自己的会议?)