Autor Zpráva
fako
Profil *
dobry den,

1. mam takyto problem: mam apache server a na https mi bezi jedna stranka na ktorej mam vyriesene prihlasovanie cez session, pricom sa zaregistruje jedina premenna uid. na tom istom serveri mam na http inu stranku, na ktorej mam takisto vyriesene prihlasovanie - session zaregistruje premennu uid.
no a deje sa mi takato vec: ked sa na jednej stranke prihlasim a potom len zmenim url v prehliadaci na druhu stranku, tak stranka napise, ze som uz prihlaseny, pricom na nu som sa vobec neprihlasoval. funguje to obojsmerne. ako odstranim takyto stav? toto mi pripada ako demonstracia toho, ako by sa dala ukradnut session, alebo je to preto,ze si server vytvoril session s touto instanciou prehliadaca a prehadzovanim po strankach tohto servera tato session pretrvava, aj ked sa jedna o iny protokol?

pre istotu este prikladam conf apache:
...
<VirtualHost fako:80>
DocumentRoot c:/www/triky/
</VirtualHost>

<VirtualHost fako:443>
DocumentRoot "c:/www/mat/"
SSLEngine On
SSLCertificateFile conf/ssl/fako.cert
SSLCertificateKeyFile conf/ssl/fako.key
</VirtualHost>



a potom by som mal par malych otazok:
2. nerozumiem dost dobre PHPSESSID, kde sa to da vyuzit, videl som aj sposoby, ked to davali ako parameter v url, ale nechapem naco, ved ked sa session zaregistruje, tak to netreba pisat aj do url...?ake to ma vyhody
3. ak by som mal teda dovod zistit PHPSESSID, mam to robit cez funkciu session_id(), alebo je na to lepsi sposob?
4. co odporucate registrovat v ramci jednej session? ja som zatial spravil registrovanie uid - user id, ale neviem ci je to najlepsi cin.....
koudi
Profil
1) Prohlížeč si ukládá session id podle domény - ty máš obojí na 'fako', proto se ti to 'sloučí' do jedný. Zrovna nedávno sem řešil podobnej problém.

2) Musíš předat serveru identifikaci tý session - takže buď přes cookies (kdy to nevidíš) a nebo takhle přes url. Přes cookies je to lepší, ale když je má někdo vypnutý, tak to pak nefunguje.

4) do session si dej co se ti zlíbí - sou na serveru a nikdo se ti k nim nedostane (pokud neni třeba blbě zabezpečenej/nastavenej server). U uživatele se ukládá jenom session id.
fako
Profil *
1)aha, no tak potom ako to zmenim? nemam velke skusenosti s virtualhost v apache, nemali by ste nejaky vzorovy conf ako by som mohol urobit viac domen na jednom pocitadle bez dns servera? skusal som napr. mat.fako:443 a triky.fako:80, ale na tom som sa s apachom nedohodol...:( (uvazujme teraz platformu win, tam funguje akysi zvlastny druh dns v lokalnej sieti)
2) prave som skusil vypnut cookies v inernet exploreri a prihlasovanie mi ide, v url nemam nic naviac a zmazal som vsetky cookie z historie. takze teraz uz vobec netusim, ako server vie, ze som prihlaseny ja. alebo posiela PHPSESSID vnutri HTTP poziadavku?

3) ok, beriem to tak ze session_id() je najlepsie na zistenie PHPSESSID
4) ok, rozumiem

zatial diki.
koudi
Profil
1) můžeš specifikovat, pro kterou doménu se session cookie uloží. Buď můžeš pře set_ini s volbou session.cookie_domain, nebo přes session_set_cookie_param() (aspoň myslim, že tak to je.)

2) To je nějaký divný. Jestli to je dělaný přes session, tak by to imho nemělo fungovat. Pokud vím, tak se v http požadavku session id neposílá (respsktive nastavuje se přes cookies). Otázka, jak je napsaný ten kód a jestli to neni nějaká chyba :).

3) Vždyť víceméně to id neni potřeba. PHP si to řídí samo.
fako
Profil *
1) ok, skusim to . ale aj tak by ma zaujimalo, ako sa robi ten virtual host. to co mam teraz som len horko tazko rozbehal podla manualov na apache.org :(
2) no mam stranku login.php, kde je formular na zadanie mena a hesla a udaje z neho sa odosielaju na check_login.php, tu je vypis, niektore funkcie mam definovane na inych miestach, ale tie niesu podstatne:

<?
session_start();
if (session_is_registered(uid)):
{
header("Location: index.php");
}
else:
{
require "functions.php";
if (($_POST['login'] == "") or ($_POST['password'] == "")):
header("Location: login.php");
endif;

$login = check_input($_POST['login']);
$password = check_input($_POST['password']);

if (!$spojenie):
db_connect();
select_db("portal");
endif;
$dbquery = do_sql("select *
from users
where login=\"".$login."\"
and
password=\"".md5($password)."\"");
// debug("","login",$login);
// debug("","password",$password);
// debug("","md5 password",md5($password));
$result = mysql_fetch_array($dbquery);
if (mysql_num_rows($dbquery) == 0):
{
header("Location: login.php");
}
else:
{
$uid = $result[uid];
$guid = do_sql("select *
from member_of
where uid = $uid");
session_register(uid);
$dbquery = do_sql("update users
set online=1,
last_access_datetime=\"".date("Y-m-d H:i:s")."\",
last_access_ip=\"$REMOTE_ADDR\",
last_access_host=\"".gethostbyaddr($REMOTE_ADDR)."\"
where uid=\"".$uid."\"");
header("Location: index.php");
}endif;
}endif;

// ukoncenie pripojenia k db
if ($spojenie) :
mysql_close($spojenie);
endif;
?>

a este by som ta poprosil, ak vidis v kode nejaky kiks, tak mi napis, prosim, ze sa to da aj inak, lepsie, lebo nemam este vychytane vsetky "muchy" phpecka.

zatial vdaka.
fako
Profil *
no a prepac, ale neviem ako sa sem vklada kod aby to odriadkovalo...:(
Leo
Profil
"ked sa na jednej stranke prihlasim a potom len zmenim url v prehliadaci na druhu stranku, tak stranka napise, ze som uz prihlaseny, pricom na nu som sa vobec neprihlasoval"

Vsak pisete, ze jste se PRIHLASIL na te prvni strance, tak jak to, ze jste se neprihlasoval? Leo
fako
Profil *
myslel som to takto: na serveri apache bezia dva virtualhosty, jeden na https, na ktorom je jena stranka a na tejto som sa prihlasil. dalej na tom serveri bezi dalsi virtualhost na http (vid vyssie je cast httpd.conf apache) a na nom bezi druha stranka, jedna sa uz o iny web. a teda ked som sa prihlasil na jednej stranke (https) a prepisal som url na druhu (http) tak tato druha stanka mi napisala, ze som uz prihlaseny.
dovod, preco to tak robi mi uz napisal koudi. skor by som ale potreboval vediet, ako to odstranit, koudi navrhol ukladat cookie pre kazdu domenu zvlast, skusim to, ale aj tak by som chcel vediet ci sa da urobit nieco v style:

<VirtualHost triky.fako:80>
DocumentRoot c:/www/triky/
</VirtualHost>

<VirtualHost material.fako:443>
DocumentRoot "c:/www/mat/"
SSLEngine On
SSLCertificateFile conf/ssl/fako.cert
SSLCertificateKeyFile conf/ssl/fako.key
</VirtualHost>

bohuzial, takto to nejde a stale neviem preco, googlim uz asi tyzden a stale tomu nechapem.....chcel som vyuzit jeden, sice proprietarny windows protokol|funkciu, ktorou si windows prekladaju mena pocitacov na ip adresy a naopak v lokalnej sieti, myslim, ze sa to vola netbios, ale nie som si isty. a tak myslel, ze keby som vyrobil virtualhost material.fako, tak windows sa najprv opyta pocitacov v sieti na ip adresu pocitaca fako a potom posle nan https request na stranku material.fako. no ale nejde to. :( preto uvitam akukolvek radu tykajucu sa tohto problemu....


co sa tyka toho skriptu uvedeneho vyssie, nasli ste nejaku chybu?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0