从网址中删除会话ID

时间:2010-10-21 09:57:13

标签: php url-parsing

我想开发简单的网页抓取工具,从多个网站抓取网页并保持实际状态。其中一些网站在每个链接上都有会话ID,它们根本不会在cookie中存储sesion ID。所以,如果我将多次解析网站 - 我的解析表将包含只在会话ID中有区别的共同页面。

所以我的问题是:如何从所有链接中删除会话ID,是否有一些明智的想法?我正在开发 php ,但所有其他平台解决方案都很有用,甚至只是对单词有用。

3 个答案:

答案 0 :(得分:2)

作为一个例子,如果你想使用一个RegEx,这将删除你的网址中的所有会话(只要他们有32个字符,这是我通常的猜测):

$url = preg_replace('#([\w\d]+=[\w\d]{32})#',null,$url);

答案 1 :(得分:1)

您始终可以使用正则表达式来匹配会话密钥,它们在大多数情况下都是典型的(PHPSESSID)。无论如何,如果您正在抓取某些内容并希望接受并使用Cookie,则应使用cURL(请参阅curl_setopt COOKIE,COOKIEFILE和COOKIEJAR)。

答案 2 :(得分:1)

您可以使用parse_str()和http_build_query()来提取,清除和重建URL参数。您可以使用正则表达式,但我认为使用URL参数数组会更容易。

parse_str('session=123445&data=example&action=demo', $url_params);
// $url_params is now an associative array of the url params
unset($url_params['session'], $url_params['action']);
$new_url_param_string = http_build_query($url_params);