mdmZinc 3 AS2 metóda triedy nezapisuje cookies
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
mdmZinc 3 AS2 metóda triedy nezapisuje cookies
Začal som robiť jednu aplikáciu a mám taký teoreticko-praktický problém pri písaní jednej triedy.
Samotná funkcionalita mi problém nerobí ale jedná sa o také jedno chovanie, ktoré mi robí problém pri funkčnosti aplikácie ako takej.
Mám vytvorenú triedu na prihlasovanie k jednej cudzej internetovej službe (na ktorej aplikácia parazituje)), ktorá nemá na tento druh prihlásenia žiadne API a po prihlásení je potrebné aby som mal platnú cookie pre ďalšie operácie v aplikácii. Ak vytvorím prihlásenie procedurálne, tak všetko funguje v poriadku, ale akonáhle to "zapúzdrim" do triedy, tak ma síce prihlási ale cookie nemám a tak neviem vykonávať ďalšie potrebné operácie (lebo som identifikovaný ako neprihlásený).
Je to normálne chovanie alebo mám hľadať nejaké obkľuky? Samotnú kontrolu existencie alebo platnosti danej cookie neviem overiť inak ako načítaním web stránky a vyparsovaním HTML a hľadania prihlasovacieho formulára, čo mi je ale prd platné, ak to urobím krátko po prihlásení pomocou metódy v triede.
// edit: Zmena názvu témy
Samotná funkcionalita mi problém nerobí ale jedná sa o také jedno chovanie, ktoré mi robí problém pri funkčnosti aplikácie ako takej.
Mám vytvorenú triedu na prihlasovanie k jednej cudzej internetovej službe (na ktorej aplikácia parazituje)), ktorá nemá na tento druh prihlásenia žiadne API a po prihlásení je potrebné aby som mal platnú cookie pre ďalšie operácie v aplikácii. Ak vytvorím prihlásenie procedurálne, tak všetko funguje v poriadku, ale akonáhle to "zapúzdrim" do triedy, tak ma síce prihlási ale cookie nemám a tak neviem vykonávať ďalšie potrebné operácie (lebo som identifikovaný ako neprihlásený).
Je to normálne chovanie alebo mám hľadať nejaké obkľuky? Samotnú kontrolu existencie alebo platnosti danej cookie neviem overiť inak ako načítaním web stránky a vyparsovaním HTML a hľadania prihlasovacieho formulára, čo mi je ale prd platné, ak to urobím krátko po prihlásení pomocou metódy v triede.
// edit: Zmena názvu témy
-
javatar
Hardcore addict
- Príspevky: 6112
- Registrovaný: 12 aug 2010, 14:49
- Bydlisko: I don't exist at all.
Re: Teoretická otázka ohľadne OOP
takze ak spravne rozumiem - ten isty kod v procedure funguje ale ked z neho urobis metodu triedy tak uz nie?
ak je to tak, tak by som hladal nejake specifikum jazyka... predpokladam, ze robis vo flashi
ak je to tak, tak by som hladal nejake specifikum jazyka... predpokladam, ze robis vo flashi
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Teoretická otázka ohľadne OOP
bolo by treba viac detailov, v akom jazyku to robíš, ako uchovávš tú cookie a podobne.
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Teoretická otázka ohľadne OOP
Takže podľa otázok predpokladám, že to asi nie je štandardné chovanie.
Využívam framework Zinc ale pri prihlasovaní ešte nevyužívam žiadnu z jeho tried a funkcií. Zinc slúži na prevod SWF do EXE a tak nemám priamo možnosť manažovať správu cookies a tak to nechávam na danom EXÉčku.
Procedurálna forma scriptu sa veľmi nelíši od tej, ktorú používam v triedach. Na jednoduchšiu komunikáciu (aplikácia <-> server) som si vytvoril metódu podobnú tej, ktorá je v jQuery a nazval som ju ajax (zinc obsahuje iba funkcie na komunikáciu pomocou TCP/UDP laebo FTP a nič pre mňa použiteľné pre HTTP).
Pre overenie prihlásenia som vytvoril:
V AS2 nemám regulárne výrazy, ani žiadne iné lepšie parsovacie nástroje a tak som po niekoľkých experimentoch a meraniach rýchlosti scriptu dospel k tomu, že cez pole je to najlepšie. Ak sa vo vrátenom HTML zdroji nachádza slovo prihlasenie 2 a viac krát znamená to, že mi to vrátilo formulár (po prihlásení nastane na servery presmerovanie a vráti to hlavnú stránku, na ktorej vrchu je prihlasovací formulár ak som odhlásený), čiže som odhlásený (je to škaredé ale funkčné).
Samotná komunikácia nasleduje takto:
Ak toto nemám v triede a krátko potom zavolám znovu (napr. kliknutím na tlačítko):
Som stále prihlásený. Ak je to ale v triede, tak po stlačení tlačítka prihlásený nie som z čoho som vyvodil záver, že cookie neexistuje.
Využívam framework Zinc ale pri prihlasovaní ešte nevyužívam žiadnu z jeho tried a funkcií. Zinc slúži na prevod SWF do EXE a tak nemám priamo možnosť manažovať správu cookies a tak to nechávam na danom EXÉčku.
Procedurálna forma scriptu sa veľmi nelíši od tej, ktorú používam v triedach. Na jednoduchšiu komunikáciu (aplikácia <-> server) som si vytvoril metódu podobnú tej, ktorá je v jQuery a nazval som ju ajax (zinc obsahuje iba funkcie na komunikáciu pomocou TCP/UDP laebo FTP a nič pre mňa použiteľné pre HTTP).
Kód: Vybrať všetko
function ajax (url:String, arg:Object):Void
{
if (!url)
{
_root.config.error (1);
return false;
}
var method:String = arg.method || 'GET';
var request:LoadVars = new LoadVars ();
var result:LoadVars = new LoadVars ();
result.parent = this.Class || this;
result.that = this;
result.datatype = arg.datatype || 'plain';
result.origin = arg.origin || false;
result.success = arg.success;
result.error = arg.error;
result.vars = arg.vars;
result.onLoad = function (loaded:Boolean):Void
{
var dt:String = this.datatype.toLowerCase ();
if (loaded)
{
var sfc:Boolean = (this.success && typeof this.success == 'function');
if (dt == 'mime')
{
if (sfc)
{
this.success (this, this.vars);
}
}
else
{
var data:String = String (this);
if (dt != 'html' || dt != 'plain')
{
data = data.split ('=&on')[0].split ('&on')[0];
}
if (sfc)
{
if (!this.origin)
{
data = unescape (data);
}
this.success (data, this.vars);
}
}
}
else
{
if (this.error && typeof this.error == 'function')
{
this.error ();
}
else
{
_root.config.error (2);
}
}
};
if (typeof arg.vars == 'object')
{
for (var i in arg.vars)
{
request[i] = arg.vars[i];
}
}
request.sendAndLoad (url, result, method.toUpperCase ());
}Kód: Vybrať všetko
function isLogged (result:String):Boolean
{
var piece:Array = result.split ('prihlasenie');
return (piece.length < 2);
}Samotná komunikácia nasleduje takto:
Kód: Vybrať všetko
ajax ('http://domena.sk/prihlasenie', // tu je adresa, ktorá sa nachádza v action prihlasovacieho formulára na stránke
{
datatype : 'html',
method : 'post',
vars : {
email : '[email protected]',
password : '123456'},
success : function (data:String) {
if (_root.isLogged(data))
{
trace('Prihlásený');
}
else
{
trace('Odhlásený');
}
}
});Kód: Vybrať všetko
ajax ('http://domena.sk/',
{
datatype : 'html',
success : function (data:String) {
if (_root.isLogged(data))
{
trace('Prihlásený');
}
else
{
trace('Ohlásený');
}
}
});-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Teoretická otázka ohľadne OOP
nechápem prečo to či je prihlásený overuješ tak krkolomne, a vyvodzuješ z toho závery o existencii/neexistencii cookies namiesto toho, aby si sa na tú cookinu rovno pozrel. Návodov ako vo flashi pristupovať ku cookies som našiel viacero, napr: http://stackoverflow.com/questions/1095 ... thin-flash
takto hádať nemá zmysel, treba si reálne pozreť čo sa posiela a či sa tie cookiny aj uchovávajú. Sprav si nejakú svoju stránku a pozri čo všetko ti tam príde (var_dump($_COOKIE); var_dump($_POST)) prípadne si odchyť komunikáciu cez nejaký nástroj (wireshark, charles...)
takto hádať nemá zmysel, treba si reálne pozreť čo sa posiela a či sa tie cookiny aj uchovávajú. Sprav si nejakú svoju stránku a pozri čo všetko ti tam príde (var_dump($_COOKIE); var_dump($_POST)) prípadne si odchyť komunikáciu cez nejaký nástroj (wireshark, charles...)
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Teoretická otázka ohľadne OOP
Keby to bolo tak jednoduché. Flash resp. ActionScript nevie pracovať s cookies (čítať/vytvárať). Jediná vec vo flashi, ktorá sa na cookie snaží podobať je SharedObject, čo je takpovediac podobné LocalStorage v Javascripte. Flash (aj to iba swf spustené v prehliadači), vie komunikovať s js (pomocou ExternalInterface) a js mu vie vrátiť cookie (js s cookies pracovať vie). To ale problém nerieši. Ja mám EXE aplikáciu.
Jediné, čo chcem pochopiť je ako alebo prečo je možné s procedúrou umiestnenou mimo triedy (priamo na timeline) ostať prihlásený a prečo mi tá istá procedúra/metóda nerobí to isté ak je v objekte nejakej triedy. Prešiel som aj oficiálne fórum Zincu ale nenašiel som tam nič. Moja ENG je biedna na to aby som vedel dostatočne na danom fóre popísať tento problém.
V oboch prípadoch tých funkcií mi vráti, že som prihlásený, ale následná kontrola, či prihlásenie trvá je už s rozdielnym výsledkom.
Teraz ma napadá iba to, že ak je procedúra volaná priamo z rootu inštancie (timeline najvyššej úrovne vo flashi) je cookie zapísaná, ale ak je metóda v objekte, tak je odrezaná od rootu. Skúsim nejak nasmerovať tie dáta na root, ale príde mi to celé nezmyselné lebo v tom nevidím ani nejaké bezpečnostné opatrenie pre ktoré by to robilo problém.
Jediné, čo chcem pochopiť je ako alebo prečo je možné s procedúrou umiestnenou mimo triedy (priamo na timeline) ostať prihlásený a prečo mi tá istá procedúra/metóda nerobí to isté ak je v objekte nejakej triedy. Prešiel som aj oficiálne fórum Zincu ale nenašiel som tam nič. Moja ENG je biedna na to aby som vedel dostatočne na danom fóre popísať tento problém.
Posiela sa to tak ako potrebujem. Na server to príde v poriadku.audiotrack napísal:treba si reálne pozreť čo sa posiela
Na server príde všetko. Odpoveď zo servera príde v poriadku (aj z môjho aj z toho konkrétneho).audiotrack napísal:pozri čo všetko ti tam príde
V oboch prípadoch tých funkcií mi vráti, že som prihlásený, ale následná kontrola, či prihlásenie trvá je už s rozdielnym výsledkom.
Teraz ma napadá iba to, že ak je procedúra volaná priamo z rootu inštancie (timeline najvyššej úrovne vo flashi) je cookie zapísaná, ale ak je metóda v objekte, tak je odrezaná od rootu. Skúsim nejak nasmerovať tie dáta na root, ale príde mi to celé nezmyselné lebo v tom nevidím ani nejaké bezpečnostné opatrenie pre ktoré by to robilo problém.
-
Fabo
Hardcore addict
- Príspevky: 6810
- Registrovaný: 16 nov 2007, 17:23
- Bydlisko: 's Chravenhache
- Kontaktovať používateľa:
Re: mdmZinc 3 AS2 metóda triedy nezapisuje cookies
Nepoznam ako sa ten flash chova, ale ked vravis, ze to funguje ked mas cookie v najvyssej urovni... nerobi flash nejaku blbost typu ze si po pouziti destructuje triedu a potom si constructuje novu, bez cookie? A ked ostane v root vrstve, tak je perzistentna?
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: mdmZinc 3 AS2 metóda triedy nezapisuje cookies
to napadlo aj mne ako prvé, ale z toho čo píše som pochopil, že nevytvára nový objekt. Vytvorí objekt, zavolá jednu metodu, zavolá druhú metodu
-
weroro
Flash coder
- Príspevky: 3206
- Registrovaný: 14 feb 2009, 22:34
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: mdmZinc 3 AS2 metóda triedy nezapisuje cookies
Takže vyriešené. Triedu je potrebné deklarovať dynamickú
Zbohom logika vo Flashi. 
Kód: Vybrať všetko
dynamic class nazov {
}-
Fabo
Hardcore addict
- Príspevky: 6810
- Registrovaný: 16 nov 2007, 17:23
- Bydlisko: 's Chravenhache
- Kontaktovať používateľa:
Re: mdmZinc 3 AS2 metóda triedy nezapisuje cookies
rozumiem tomu spravne, ze default stav je neperzistentna staticka klasa, tzn. implementovana tak, ze pri kazdom volani sa zavola konstruktor-metoda-destruktor?
wtf, to co je za jazyk.