3

私の質問は、次のようなメールをユーザーに送信することから生まれます。

http://mydomain.net/login/index/dest/%2Finvitation%2Fconfirm%2Fconfirmation_key%2F15116b5e4c61e4111ade679c10b3bf27

ご覧のとおり、私がやろうとしているのは、URL をパラメータ「dest」として渡すことです。これにより、ユーザーのログイン後にログイン ページがリダイレクト先を認識できるようになります。ただし、次のように表示されます。

404 見つかりません - /login/index/dest//invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27

これは、メールの作成に使用するビューです。

<p>
<?if($this->invitation->user):?>
<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
    'action'=>'index',
    'controller'=>'login',
    'dest'=>$this->url(array(
        'action'=>'confirm',
        'controller'=>'invitation',
        'confirmation_key'=>$this->invitation->confirmation_key
    ))
)));?>'>Log in to confirm this invitation.</a>

//The view continues...

これが URI エンコードされた項目をそのリテラル値に変換しないようにする方法についてのアイデアは大歓迎です。

4

3 に答える 3

6

単純な GET パラメータとして送信することはできませんか?

http://mydomain.net/login/index/?redirect=/invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27のように

それが実際にほとんど行われている方法です。

于 2011-07-14T00:23:24.967 に答える
1
  1. ChrisRが書いたものは絶対的な答えです
  2. なぜあなたはただ使わないのですか$_SERVER['referer']
于 2011-07-14T00:29:08.533 に答える
0

次のようにリンクをアップグレードすることもできます。

<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
'action'=>'index',
'controller'=>'login',
'dest'=>base64_encode($this->url(array(
    'action'=>'confirm',
    'controller'=>'invitation',
    'confirmation_key'=>$this->invitation->confirmation_key
))))

));?>'>Log in to confirm this invitation.</a>

しかし、/login/indexでは、オリジナルを取得するために を使用する必要がありますbase64_decode()。最もきれいな解決策ではありませんが、単純なクエリ文字列を使用できない場合、これは URL 経由で安全に文字列を渡す方法です。

http://en.wikipedia.org/wiki/Base64

于 2011-08-13T19:07:40.457 に答える