php,处理唯一的URL

时间:2013-06-27 22:27:59

标签: php authentication

我需要实现一项功能:

  1. 用户想在网站上注册
  2. 用户按下“快速注册”按钮
  3. 脚本生成类似“mydomain.com/user/asdfsdfsdfswe3525fsdsdfs”的唯一链接并向用户显示
  4. 如果以后的用户关注此链接 - 我们会对用户进行身份验证并显示索引页面(例如,用户可以将此链接添加为书签,并使用它而非username-pass)
  5. 我有一些限制:

    1. 链接必须类似于“mydomain.com/user/asdfsdfsdfswe3525fsdsdfs”。没有GET参数。
    2. 用户通过身份验证并加载页面后,用户应在浏览器中看到此登录URL。所以我无法将用户重定向到所需的页面/脚本
    3. 我不明白如何使用php通过这样的链接验证用户。 如何避免404错误?

1 个答案:

答案 0 :(得分:0)

Mod重写我这样做的方式,这将使它更简单但同时也很困难。

.htaccess file_ _ __ _ __ _ __ _ __ _ < / EM> ____

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /main site folder/

    RewriteRule (.*)\.xml(.*) $1.php$2 [nocase] 

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php/$1
</IfModule>

/classes/simplifyURL.php file_ _ __ _ __ _ __ _ __ < EM> _ _

<?php

class simpleUrl{

    var $site_path;

    function __construct($site_path){
        $this->site_path = $this->removeSlash($site_path);
    }

    function __toString(){
        return $this->site_path;
    }

    private function removeSlash($string){
        if( $string[strlen($string) - 1] == '/')
        $string = rtrim($string, '/');

        return $string;
    }
    function segment($segment){

    $url = str_replace($this->site_path, '', $_SERVER['REQUEST_URI']);
    $url = explode('/', $url);
    if( isset($url[$segment]))
        return $url[$segment];
    else
        return false;
    }
}

?>

index.php文件的顶部_ _ __ _ __ _ ___

<?php
include 'classes/simplifyURL.php';

$url = new simpleUrl('/main site folder');
$url1 = $url->segment(1);
$url2 = $url->segment(2);
$url3 = $url->segment(3);
$url4 = $url->segment(4);

?>

将页面包含在index.php中,基于url_ _ __ _

            <?php

 $pages_dir = 'pages';



 if (!empty($url1)) {

  $pages = scandir($pages_dir, 0);

  unset($pages[0], $pages[1]);



  $p = $url1;



  if (in_array($p.'.inc.php', $pages))  {

   include($pages_dir.'/'.$p.'.inc.php');

  } else {

   echo 'Sorry, page was not found.';

  } 

  } else {

   include($pages_dir.'/home.inc.php');

 }

 ?>

这是你必须做出的巨大转变。不管怎样,让我解释上面的部分。它接受url的第一位的值,因此在域之后并检查文件夹页面,如果它可以找到它,它将显示它。因此,对于您的情况,您需要创建一个名为user.inc.php的文件。将身份验证放入其中并使用$ url2 varible访问url的末尾,以获取您拥有的长代码。其他明智的称为动态页面。希望这有帮助

这是很多工作,我没有看到GET的错误