title: PHP Redirect to Selected Page After Login
body: <p>I'm trying to find a way to redirect a user to the page they selected if they have been forced to log in again after a session timeout.</p>
  
  <p>Right now, after the user logs in, they are redirected to index.php. But, if a user received a link in an email to a different section of my site and they have not logged in all day, they are obviously asked to log in but end up on the index.php instead of the page the link was for.</p>
  
  <p>Here is a snippet of my code in the login page:</p>
  
  <pre><code>if (mysql_num_rows($result_set) == 1) {
              // username/password authenticated
              // and only 1 match
              $found_user = mysql_fetch_array($result_set);
              $_SESSION['user_id'] = $found_user['id'];
              $_SESSION['username'] = $found_user['username'];
              $_SESSION['last_activity'] = time();
              $_SESSION['time_out'] = 7200; // 2 hours
              redirect_to("index.php");
  </code></pre>
  
  <p>Any ideas would be helpful.</p>
  
  <p>I want to thank everyone who answered my question. The solution was a combination of a few suggestions I received here. I'd like to share with you how I solved this:</p>
  
  <p>Part of the reason why I was having trouble saving the url the user tried to go to before being forced to log in again was that my sessions are handled by an external php file which takes care of confirming login and expiring current session. This file is required by all pages on my website. HTTP_REFERER would not work because it would always be set to the login.php. Here's what I did on my session.php file:</p>
  
  <pre><code>session_start();
  
  $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') 
              === FALSE ? 'http' : 'https';
  $host = $_SERVER['HTTP_HOST'];
  $script = $_SERVER['SCRIPT_NAME'];
  $params = $_SERVER['QUERY_STRING']; 
  $currentUrl = $protocol . '://' . $host . $script . '?' . $params;
  
  if ($currentUrl != "http://domain.com/login.php?") {
      $expiryTime = time()+(60*5); // 5 mins
      setcookie('referer',$currentUrl,$expiryTime,'/');
  }
  </code></pre>
  
  <p>Essentially, I saved the referring url in a cookie that is set to expire in 5 minutes, giving the user enough time to login. Then, on login.php I did this:</p>
  
  <pre><code>if(isset($_COOKIE['referer'])) {
                  redirect_to($_COOKIE['referer']);
              } else {
                  redirect_to('index.php');
              }
  </code></pre>
  
  <p>And, BINGO! Works every time.</p>