I want to add a redirection URL to my login forms action (as a query) in login page, so after loging-in, one can visit the previous page he or she was surfing.
First I thought about using Zend Session and save the url of each page in a variable. but I read in the documentation that it has overhead. So, is there a better way to do so? or is there an other way to use zend session with no overhead?
In addition to gnarfs answer, i modified it to making it validate - for those of you that get a kick of it.
$this->_redirect($this->getRequest()->getServer('HTTP_REFERER'));
What I have found as a simple method to accomplish this is just to have a hidden field in your login form.
Now, im not sure if your login form is a generic HTML element or is actually an instance of
Zend_Form
, but if its an instance ofZend_Form
, you could simple add the following:Then in my authentication script, like the comment above, I have a simple redirect that uses the value passed in to return them to the same page.
Obviously in these two examples, they are just written to compact the code and probably do not represent the best way to accomplish it. The two methods using the
getRequest()
in my code are actually not embedded in theredirect
or theaddElement
, but for example purposes I just slid them in there.The answer above will obviously work as well, unless you have some massive page redirection going on. The main reason I am running mine this way right now is because not all of my forms are running in
Zend_Form
and its also nice being able to change the value of the hiddenreturn
input text box for testing purposes.If you are not a fan of passing variables via session you could try to get $_SERVER['HTTP_REFERER'] variable in a safe way. Basically it checks if your referrer url and matches with your server local name, and scheme (http/https).
And then just
As default you can set local uri ('/')
I'm sure there is some built in method for doing this somewhere in ZF, but I'm lazy, so I did it this way:
Create your own App_Controller_Action class (create /library/App/Controller/Action.php). Extend all of your controllers off of this class
In each of my controllers, I call $this->_initAuth(), function pasted below:
In my AuthController, I do the following to make sure my form points to the full url:
If the login validates, then I do the following:
First, you need to grab the original url for the redirection. You can do that by the Zend_Controller_Request class via:
or simply by:
Then, the tricky part is to pass it through the user request. I recommend to use the library Zend_Session, despite using a POST parameter is also legitimate:
Please note that the address we kept includes the base path. To redirect the client in the controller class, disable the option 'prependBase' to lose the base path insertion: