Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Удаление куки


Автор: aktuba 15.4.2007, 10:59
Такая проблема: надо перед запросом на сайт удалить куки, связанные с этим сайтом. Делаю следующее:
Код

function  THTTPThread.GetCookie(AHost: string): string;
var
  lpStr: PChar;
  lpLen: Cardinal;
begin
  lpLen := 0;
  InternetGetCookie(PChar(AHost), nil, nil, lpLen);
  if lpLen > 0 then
    begin
      lpStr := SysGetMem(lpLen);
      try
        InternetGetCookie(PChar(AHost), nil, lpStr, lpLen);
        if lpStr <> '' then
          Result := Copy(lpStr, 1, lpLen);
      finally
        SysFreeMem(lpStr);
      end;
    end;
end;

procedure THTTPThread.DeleteCookie(AHost: string);
var
  lCook: string;
  lpStr: PChar;
begin
  lCook := GetCookie(AHost);
  if lCook <> '' then
    begin
      // <-------------------------------------- Вот тут не знаю что сделать =((((((
    end;
end;


Нашел на винграде такой код на C++:
Код

BOOL MHTTP_KillCookie(const char *url, const char *name)
{
    BOOL ret_code = FALSE;
    char* cook;
    const char sReset[] = " = 0; expires = Sat, 01-Jan-1990 00:00:00 GMT";
    cook = (char*)heap_alloc(lstrlen(name) + sizeof(sReset));
    if(!cook)
        return ret_code;
    lstrcpy(cook, name);
    lstrcat(cook, sReset);
    ret_code = InternetSetCookie(url, NULL, cook);
   
    heap_free(cook);
    return ret_code;
}
// ############################################################################
void MHTTP_KillCookies(const char *url)
{
    char serv[255];     //адрес сервера где убиваем Cookie
    //удаляем все временные файлы интернета
    MHTTP_DelTempFiles();
    // ------------------------------------------------------------------------
    // Взятие с url адреса сервера serv
   // здесь строки вида "http://google.com/path?query" превращаются в 
   // строки вида "http://google.com", тобишь возвращается сервер от полного адреса коль не ясно
    HTTPT_url hurl;
    HTTPT_UrlParse(&hurl, url);
    HTTPT_UrlGetServAddr(hurl, serv);
    // ------------------------------------------------------------------------
    DWORD size;
    InternetGetCookie(serv, NULL, 0, &size);
    if (!size)
        return;
    char*   data = (char*)heap_alloc(size);
    InternetGetCookie(serv, NULL, data, &size);
    // ------------------------------------------------------------------------
    // перебор имён cookie
    char cookieName[255];
    char *ch1, *ch2;
    ch1 = data;
    while (1)
    {
        // --------------------------------------------------------------------
        // имя
        ch2 = StrStr(ch1, "=");
        if (!ch2)
            break;
        lstrcpyn(cookieName, ch1, ch2 - ch1 + 1);
        // --------------------------------------------------------------------
        //сброс
        MHTTP_KillCookie(serv, cookieName);
        // --------------------------------------------------------------------
        // следующий cookie
        ch1 = StrStr(ch1, "; ");
        if (!ch1)
            break;
        ch1 += 2;
    }
    heap_free(data);
}


Самому перенести не удалось сразу. Может кто поможет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)