Estoy considerando pasar siempre? PHPSESSID = x en la cadena de consulta para
cada url relevante como solución.
Esta no es la mejor práctica, pero si decides elegir este método (porque es fácil), puedes hacer algo como esto:
<?php
define("COOKIE_NAME", "PHPSESSID");
define("DOMAIN", "example.com");
function is_valid_cookie($cookie){
//Test if the cookie is valid and does not have any malicious chars (";", etc)
//...
return true;
//...
return false;
}
function is_logged_in(){
//Test if the user is logged in
//...
return true;
//...
return false;
}
function sanitize_url($url){
//Sanitize URL
//If you have PHP >= 4.4.2 or PHP >= 5.1.2, I believe you have nothing to worry here
//...
return $url;
}
function remove_querystring_var($url, $toRemove){
//Removes $toRemove from query string of the $url
$parsed = array();
parse_str(substr($url, strpos($url, '?')+1), $parsed);
$url = substr($url, 0, strpos($url, '?'));
unset($parsed[$toRemove]);
if(!empty($parsed)){
$url .= '?' . http_build_query($parsed);
}
return $url;
}
if(isset($_GET[COOKIE_NAME])){
if(is_valid_cookie($_GET[COOKIE_NAME])){
setcookie(COOKIE_NAME, $_GET[COOKIE_NAME], time()+24*3600, "/", ".".DOMAIN, true, true);
header("Location: ".sanitize_url(remove_querystring_var("https://".DOMAIN.$_SERVER["REQUEST_URI"], COOKIE_NAME)));
exit(0);
}
else{
header("Location: ".sanitize_url(remove_querystring_var("https://".DOMAIN.$_SERVER["REQUEST_URI"], COOKIE_NAME)));
exit(0);
}
}
else if(!is_logged_in()){
echo "Invalid session!";
exit(0);
}
//...
echo "Welcome!";
?>
Ejemplo:
Google usará y excluirá la variable & auth, pero mantendrá la & nada, porque & auth tiene datos confidenciales para Google.