Ask a Question related to ASP Components, Design and Development.
-
Brandon #1
Reading Cookies (Tough one!)
Hi all,
I wrote a function (C++) for use in my Active Server
Object that is meant to read cookies. It gives some very
strange behavior in that it won't work at all until I
refresh my web page 6 times (yes, exactly 6 times, every
time), then only the first request for a cookie value
works. Sounds like I'm possible not properly
allocating/deallocating memory or something? Anyway,
below is the function, any thoughts?
BTW: You can see commented lines where I have been trying
different things.
Also, I couldn't find a microsoft newsgroup that focused
on ActiveX/C++... So if there is a better NG to post
this, please let me know.
Thanks in advance to you all,
-Brandon
AnsiString TBrandonsImpl::get_cookie( AnsiString name,
AnsiString key )
{
HRESULT result = NOERROR;
IRequestDictionary* CookiesDict = NULL;
IReadCookie* ReadCookie = NULL;
TVariant TheCookie;
AnsiString mycookieval = "Undefined";
int numkeys = 0;
VARIANT vtCookieDict; // ptr to
dispinterface IWriteCookie
VARIANT vtCookieName; // For the name of
the cookie
VARIANT vtCookieKey; // For the cookie key
VARIANT vtCookieVal; // For the cookie
value
VariantInit(&vtCookieDict);
VariantInit(&vtCookieName);
VariantInit(&vtCookieKey);
//VariantInit(&vtCookieVal);
//
// Set the name of the cookie and change the type If you
don't
// IRequestDictionary::get_Item() will fail because the
variant will come
// through as VT_EMPTY.
//
vtCookieName.bstrVal = BSTR(WideString(name));
vtCookieName.vt = VT_BSTR;
//
// Because this is a "simple" cookie (as opposed to a
named cookie), we'll set
// the Variant Type to VT_ERROR and the error to
DISP_E_PARAMNOTFOUND. This
// essentially makes the Varient an "Automation optional
parameter" when
// passed into a function.
//
if( key == "" )
{
vtCookieKey.bstrVal = BSTR(WideString(key));
vtCookieKey.vt = VT_ERROR;
V_ERROR(&vtCookieKey) = DISP_E_PARAMNOTFOUND;
}
else
{
vtCookieKey.bstrVal = BSTR(WideString(key));
vtCookieKey.vt = VT_BSTR;
}
aspwrite( "Getting the cookie dictionary...<br>" );
//
// First you have to get the IRequestDictionary then
call get_Item() to get
// the actual IWriteCookie object.
//
result = Response->get_Cookies(&CookiesDict);
if(!SUCCEEDED(result))
{
return( mycookieval );
}
else
{
aspwrite( "Got it. Now getting the cookie by name ("
+ name + ")...<br>" );
//
// Request access to the cookie with the name of the
input parameter.
// CookiesDict will return with the ptr to the
IWriteCookie object.
//
result = CookiesDict->get_Item(vtCookieName,
&vtCookieDict);
if(!SUCCEEDED(result))
{
CookiesDict->Release();
return( mycookieval );
}
else
{
//
// Get the cookie...
//
//ReadCookie = (IReadCookie*)(vtCookieDict.pdispVal);
vtCookieDict.pdispVal->QueryInterface(
IID_IReadCookie, (void **)&ReadCookie );
ReadCookie->get_Count( &numkeys );
aspwrite( "Got that, too (" + AnsiString(numkeys)
+ " keys). Now getting the cookie by key (" + key
+ ")...<br>" );
result = ReadCookie->get_Item( vtCookieKey,
&vtCookieVal );
//
// Cleanup...
//
ReadCookie->Release();
CookiesDict->Release();
if( !SUCCEEDED(result) )
return( mycookieval );
//
// Set the return value (as AnsiString)
// Note: used to fill AnsiString value, passed by
pointer.
//
mycookieval = Variant(vtCookieVal);
//Response->Write(vtCookieVal);
aspwrite( "cookie: " + mycookieval + ".<br>" );
//*value = AnsiString(vtCookieVal);
//*value = mycookieval;
}
}
return( mycookieval );
}
Brandon Guest
-
Hm this is gonna be a tough one..
Have you guys ever played a game named Grim Fandango? Properbly not. Anyway, we are doing a game smiliar to Grim Fandango, which means its a 3d... -
tough one IXmlSerializable
I've got an tough question regarding xml serialization and web services... I've got a custom class that I am returning from my web method. ... -
AOL not reading cookies
Hi, I have AOL users who can't log into my site (forms authentication). I set a cookie like this: Dim loginNameCookie As HttpCookie... -
Tough question - tell client to update?
Hi, Is it possible (via Internet Explorer) to tell the clients to update? I have a picture that is shown in the client browsers. Often I... -
Old Toad Quiz: tough
http://www.mickweb.com/quiz/ Please check for typos and errors. Passing Scores: NY: 60% USA 55% ROTW: 50% Mick



Reply With Quote

