ASP.Net 4 で Web サイトを開発しています。要件の 1 つは、人々が Web サイトを見つけるために使用する検索クエリをログに記録することです。したがって、"q" という名前の URL パラメーターが Referrer に存在すると仮定して、MasterPage の Page_Load に次のコードを記述しました。
if (!CookieHelper.HasCookie("mywebsite")) CookieHelper.CreateSearchCookie();
そして、私のCookieHelper
クラスは次のようになります:
public class CookieHelper
{
public static void CreateSearchCookie()
{
if (HttpContext.Current.Request.UrlReferrer != null)
{
if (HttpContext.Current.Request.UrlReferrer.Query != null)
{
string q = HttpUtility.ParseQueryString(HttpContext.Current.Request.UrlReferrer.Query).Get("q");
if (!string.IsNullOrEmpty(q))
{
HttpCookie adcookie = new HttpCookie("mywebsite");
adcookie.Value = q;
adcookie.Expires = DateTime.Now.AddYears(1);
HttpContext.Current.Response.Cookies.Add(adcookie);
}
}
}
}
public static bool HasCookie(string cookiename)
{
return (HttpContext.Current.Request.Cookies[cookiename] != null);
}
}
一見大丈夫そうです。Google からのリンクを模倣するページを作成し、魔法のように機能しました。ただし、ホストサーバーでは機能しません。その理由は、検索すると、ブラウザのアドレス バーに次のblah blah
ようなものが表示されるからです。www.google.com/?q=blah+blah
結果のリンクをクリックすると、サイトにリダイレクトされ、「q」パラメーターを取得できます。しかし、残念ながら、それは真実ではありません! Google は、最初に次のようなアドレスにリダイレクトします。
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCgQFjAA&url=http%3A%2F%2Fwww.mywebsite.com%2F&ei=cks5Uof4G-aX0QXKhIGoCA&usg=AFQjCNEdmmYFpeRRRBiT_MGH5a1x9wUUlg&bvm=bv.52288139,d.d2k&cad=rja
これにより、あなたのウェブサイトにリダイレクトされます。ご覧のとおり、今回は「q」パラメーターが空です。そして、私のコードは空の文字列を取得し、実際には Cookie (または何でも) を作成しません。この問題を解決して実際の「q」値を取得する方法があるかどうかを知る必要があります。ユーザーが自分の Web サイトを見つけるために入力した実際の検索用語。これを解決する方法を知っている人はいますか?