Aller au contenu

URL Rewriting - faute ==> Cookie issue - header=..


Sujets conseillés

Posté

J'ai réecrit URL. Ça marche. Mais au premier d'entre, il y a un cookie header=kh4kéh4é34é3é3 (changer chaque fois de l'entre) apres les address

Par Ex: www.monweb.com/monaddress.htmlheader=43854jfsdjhfg34534.

Mais si vous cliquez sur un address (un url ). Le cookie (header=...) est disparu.

Aide-moi. Qu'est ce que je dois faire pour éviter ce cookie.

URL ==> http://www.wedonow.com/news/

Je pense que c'est la faute de session dans le fiche session.php

Code de fiche session.php

<?php 
$nowtime = time();
$time_update = $nowtime - 1800;
session_name("sid");
session_name("header");
session_start();
if ( !isset($_SESSION["login"]) )
{
session_name("sid");

session_register("login");
session_register("user_id");
session_register("name");
session_register("email");
session_register("timezone");
session_register("start_time");
session_register("poll_time");
session_register("header");

$_SESSION["login"] = "not_login";
$_SESSION["user_id"] = -1;
$_SESSION["name"] = "";
$_SESSION["email"] = "";
$_SESSION["timezone"] = "+7";
$_SESSION["start_time"] = $nowtime - 1300;
$_SESSION["poll_time"] = $nowtime - 3700;
$_SESSION["header"] = -1;;
}

if ($_SESSION["start_time"]<$time_update)
{
$_SESSION["start_time"] = $nowtime;

$sess_id = session_id();
$prevtime = $nowtime - 1800;

$dbsql = new db_mysql;
$dbsql->connect();
$dbsql->selectdb();
//-----------------------------------------------------
$sql_delete = "DELETE FROM sessions WHERE start_time<".$prevtime;
$dbsql->query($sql_delete);

$sql_select = "SELECT * FROM sessions WHERE session_id='".$sess_id."'";
$dbsql->query($sql_select);
if ($dbsql->num_rows()==0)
{
$sql_insert = "INSERT INTO sessions(session_id,start_time) VALUES('".$sess_id."',".$nowtime.")";
$dbsql->query($sql_insert);
}
//-----------------------------------------------------
$dbsql->close();
}

$user_id = isset($_SESSION["user_id"]) ? intval($_SESSION["user_id"]) : -1;
$user_name = isset($_SESSION["name"]) ? $_SESSION["name"] : "";
$user_email = isset($_SESSION["email"]) ? $_SESSION["email"] : "";
$timezone = isset($_SESSION["timezone"])? $_SESSION["timezone"]: "+7";
$header = isset($_SESSION["header"]) ? $_SESSION["header"] : "-1";
?>

Merci d'avant

Posté

giangcui, bonjour et bienvenue à bord du Hub !

Les sessions sont probablement inévitables pour le bon fonctionnement de ton site. Vu la langue de celui-ci, je n'y ai pas traîné longtemps ;)

Si tu fais de la réécriture, tu peux rajouter le flag QSA en fin de règle pour que la variable de session soit rajoutée si nécessaire.

Exemple:

RewriteRule fichier.html  fichier.php [QSA,L]

Dan

Posté

Merci votre répond.

Mais j'ai déjà changé

RewriteRule fichier.html fichier.php ==> RewriteRule fichier.html fichier.php [QSA,L]

et même

RewriteRule /fichier.html /fichier.php => RewriteRule /fichier.html /fichier.php [QSA,L]

Mais il y a eucore cookie header=fdkgh354fhj3f4jhfd3h apère les URL

Et allor, qu'est ce que je dois faire pour supprimer le cookie header=.... au premier d'entre? Maintenant c'est pas bon, les search engine va trouver les address avec cookie???

Aide les gens génie! :whistling:

Posté

Les sessions sont inévitables, mais probablement pas nécessaires pour tout le monde.

Une manière d'éviter les problèmes d'indexation est de ne pas activer les sessions en cas de visite de robot.

Par exemple:

// Spider/Bot pour référencement 

$spiders = array("Googlebot",  "crawler", "Slurp", "Fast","ia_archiver","Scooter","Robot",
"VoilaBot","W3C","ZyBorg","D*****","xecho");
$from_spider = false;
foreach($spiders as $Val) {
     if (eregi($Val, $_SERVER["HTTP_USER_AGENT"])) {  
           $from_spider = true;
            break;
     }
}

ini_set("session.use_trans_sid", "0");
if(!$from_spider) {
// ici le code de démarrage de sessions....
     session_start();  
}

  • 2 semaines plus tard...
Posté

Bonjour,

J'ai déjà fixer cet faute par changer l'order des inslude file. Je laisse le code ob_start(); au debout. Donc. il marche.

Mais un grand problème, Avec les URL j'ai essayer. http://www.wedocoder.com/news/ or http://www.thuonghieuvn.com/new/ il marche bien. Mais à website pricipale http://www.wedo.com.vn (or www.wedonow.com ) il ne marche pas. Il change le cookie header=sgfg38gf4538... par PHPSESSID=d7b1259df....

Donc aidez_moi. Quelles sont les problème ici.

Merci d'avant.

(j'ai essayé avec le code ini_set("session.use_trans_sid", "0"); mais il y a encore le cookie).

Posté

Bonjour Giangcui,

L'identifiant de session est rajouté par php sur la première page vue, pour toutes les URL non absolues.

C'est pour cette raison qu'on voit cet identifiant lors d'un clic sur un de ces liens.

Pour l'éviter, passes toutes tes URLs en absolu (avec http://....)

Dan

Posté (modifié)

Bonjour Dan,

Tu es vraiment Administrateur. Tous sont comme tu a dit.

je change to URLs en absolu dang le replace_for_mod_rewrite avec http://.... et il fonctionne bien.

Mais je utilise é domain pour ce website. Et je sais pas comment faire pour creer URLs en absolu qui dépend le domain qu'on entre mon website. Par exempl: Si on entre par www.wedonow.com donc dans les URLs dans la function replace_for_mod_rewrite est changer vers http://wedonow.com et on entre par www.wedo.com.vn les URLs dans replace_for_mod_rewrite est changer vers http://wedo.com.vn.

Merci bc,

http://www.webmaster-hub.com - Number one!

Modifié par giangcui
Posté

Hi Gianqcui,

Je continue en Français mais si tu ne comprends pas tout envoies moi un MP et je te donnerai l'explication en Anglais...

(if you don't understand the following, drop me a private message and I'll switch to english)

Pour faire une réécriture d'URL dépendant du nom de domaine , c'est simple.. il suffit d'utiliser les réécritures conditionnelles.

RewriteCond %{HTTP_HOST} www.wedo.com.vn 
RewriteRule  (.*) http://wedo.com.vn$1 [R=301,L]

RewriteCond %{HTTP_HOST} www.wedonow.com
RewriteRule  (.*) http://wedonow.com$1 [R=301,L]

RewriteRule ....

Ceci force tout le trafic de www.wedo.com.vn vers wedo.com.vn, en retournant une entête 301 (Moved permanently) qui forcera les moteurs à mettre les liens à jour. Idem pour www.wedonow.com, redirigé sur wedonow.com

Assures-toi d'avoir une ligne vide entre chaque condition.

Dan

PS: thanks for the "number one!" ;)

Posté

Hello,

j'ai deja ecrire le code RewriteCond et RewriteRule dans le fiche .htaccess.

Mais je veux changer dans le function replace_for_mod_rewrite:

Par Ex:

<?php

ob_start();

function replace_for_mod_rewrite(&$s) {

$urlin = array(

"'(?<!/)index.php\?act=view&code=par&pid=1'",

"'(?<!/)index.php\?act=wedo'"

);

$urlout = array(

"DOMAIN_ENTRER/tuvan.html",

"DOMAIN_ENTRER/wedo.html"

);

$s = preg_replace($urlin, $urlout, $s);

return $s;

}

?>

Ici, domain_entrer sont www.wedonow.com ou www.wedo.com.vn

Merci! :shake:

:shake::shake:

Posté

Giangcui,

Je n'avais pas vu ces RewriteCond dans le fichier .htaccess comme j'avais édité ton post original :(

Dans un programme php, la variable $server['HTTP_HOST'] contient le nom du host demandé. Il suffit sonc de faire un test sur celui-ci.

Pour enlever le "www." , il suffit de mettre une ligne telle que:

$domain=ereg_replace("www.","",$server['HTTP_HOST'] );

et ensuite utiliser $domain, éventuellement précédé de &quot;http://" dans le reste du code.

Dan

Posté

Merci,

J'ai trouvé cette variable $server['HTTP_HOST'].

Mais quand les URL marchent bien, je ne peut pas entrer dans la zone de administrater. Quand je login (connecte) dans la zone de l'administrater. Il est toujours annoncé

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/wedo/public_html/config.php:30) in /home/wedo/public_html/includes/sessions.php on line 6

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/wedo/public_html/config.php:30) in /home/wedo/public_html/includes/sessions.php on line 6

Et il s'arrete. Je peux pas entrer.

Le code de la fiche session.php comme le premier post.

Giangcui_AT_

Posté

Bonjour,

Dans le fichier /home/wedo/public_html/config.php, tu dois avoir uen echo ou un print avant l'ouverture de session, ce qui empêche l'envoi des entêtes. Regardes vers la ligne 30, ca peut être même un caractère "espace" qui échappe à l'examen.

Dan

Posté (modifié)

Le code de la fiche config.php ne contient pas un echo pour ouverture de session et ni caracter "espace" (selement 28 ligne).

Supprime'

Modifié par giangcui

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...