Allow only signed in users to see external html site hosted on the same server and domain (in sub folder)
我有一个PHP站点(站点A,CakePHP 2.3),带有其自己的登录系统。然后,我在同一台服务器上有另一个"站点"(实际上是具有自己的index.html的html生成的电子书),但是在不同的文件夹中,我们将其称为站点B。
我试图仅允许在站点A上具有有效会话的用户(已使用有效凭据登录)查看该电子书(访问该index.html文件)。这背后的主要思想是防止用户直接共享站点B的URL。
如果我可以从站点B检查站点A上用户的会话,这将很容易,我可以仅检查$ _SESSION变量,但这是不可能的。
最简单的方法是什么?虽然不是最好的选择,但是我必须从站点B编辑该index.html文件以添加任何有助于此操作的代码也可以。
我想到的一种方法是从站点A到站点B进行一些javascript重定向,其中包括POST变量,如果该变量不存在,则不会显示任何内容。这将需要在站点B的index.html上添加一些php,但是我不确定这是否是最佳解决方案,我想知道是否还有更好的方法。
此外,我有100本书,所以如果我可以大量应用,那会更好。
编辑:
为澄清起见,两个站点都位于同一服务器中,并且具有相同的"域"。要打开站点B,我使用站点A的符号链接。例如:
-
站点A网址:http://example.com
-
站点B网址:PHP从站点A重定向到" / symlink / to / siteB / location /"),实际上,它会将用户带到http://example.com/symlink/to/siteB/location/
创建代理
我将使用
此
当然,您需要创建一个重定向,该重定向将原始请求的页面作为参数传递,以便您知道要读取的文件。
当然,这不是超级有效的方法,但它可以工作。我必须在一个旧项目中解决完全相同的问题。
笔记
请确保您的.htaccess规则仅拦截/重定向HTML链接,否则您需要注意为CSS或图像文件设置正确的响应标头。
.htaccess的示例
该目录必须位于该书的ROOT文件夹中
1 2 3 4 | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*html)$ http://[FULL_LINK_TO_CAKE_APP]/proxy/load/$1 </IfModule> |
代理控制器的示例
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 | namespace App\\Controller; /** * Static content controller * * This controller will render a html file * */ class ProxyController extends AppController { public function load($file=null){ if( !$file ){ return $this->response->body("Error: no file specified" ); } //THIS NEEDS TO RESOLVE THE FULL DISK PATH OF YOUR PROTECTED FILES $pathToFiles = WWW_ROOT . '/subfolder/'; if( file_exists( $pathToFiles . $file )){ $this->response->body( file_get_contents( $pathToFiles.$file) ); return $this->response; } $this->response->body('Could not load the file: ' . $pathToFiles . $file); return $this->response; } } |
安全
当然我认为您已经在