2011-12-31 13 views
2

私はiPhoneとAndroidのモバイルWebサイトアプリケーションを開発しようとしています。現在、私のサイトはcURLを使ってユーザーを他のサイトにログインさせています。私はユーザーのユーザー名に基づいてクッキーを作成するPHPスクリプトを持っています。 cURLはその情報をそのCookieに格納します。クッキーは私のサイトのホストに保存されています。ユーザーの資格情報を保存するためのより良い方法

私が作成しているこのモバイルサイトは、ユーザーが私が開発したフォーラムにログインできるようにすることを想定しています(サイト所有者は私のサイトでモバイル版を作成することはできません)その後、彼らがログインすると、投稿を読んで返信することができます。それが読まれると、スレッドはクッキーをロードする必要があります。また、ポストを作成しようとするときも必要です。

私のサーバーではなくユーザーの電話に保存するためにクッキーを取得するにはどうすればよいですか?私が尋ねる理由は、ホストのユーザーが(私はフィッシングではないので見たくない)数多くのテキストファイルで満たされないようにしたいからです。

私はユーザーがサインインするようにしたいので、クッキーは電話に保存されます。彼らは電話がそのクッキーをプルアップするポストを読んでみたい。彼らは投稿したい、電話はクッキーをプルアップする。

私はPHPのsetcookie()関数を調べましたが、私が必要としているかどうかはわかりませんでした。

ご協力いただければ幸いです。

答えて

0

サーバー側でCookieを設定すると、CookieがHTTPヘッダーという名前でクライアント(この場合は電話)に送信されます。 「Set-Cookie」という名前のHTTPヘッダーとCookieのValueがあります。ブラウザが将来サーバーに要求を行うと、Cookieと呼ばれるHTTPヘッダーにその値を戻すことが期待されます

したがって、Cookieを設定してそのCookieを使用する場合は、あなたの要求からのクッキー、それを安全な場所に保管し、将来のリクエストでそれを返すことができます。ここで

http://en.wikipedia.org/wiki/HTTP_cookie

URL、ユーザー名とパスワードを取り、クッキーの値を返す単純な認証方法です。

static public String authenticate(String service_url, String username, String password) throws IOException 
{ 
    if (username == null || password == null) 
     throw new IOException(); 

    String charset = "UTF-8";  
    URL url = new URL(service_url); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset="+charset); 
    connection.setDoOutput(true); 
    connection.setRequestMethod("POST"); 
    connection.setReadTimeout(5000); // 2 second timeout. 

    String query = String.format("Email=%s&Password=%s", 
      URLEncoder.encode(username, charset), 
      URLEncoder.encode(password, charset)); 

    OutputStream output = null; 
    try { 
     output = connection.getOutputStream(); 
     output.write(query.getBytes(charset)); 
    } finally { 
     if (output != null) try { output.close(); } catch (IOException logOrIgnore) {} 
    } 

    connection.getInputStream(); 

    List<String> cookies = connection.getHeaderFields().get("Set-Cookie"); 
    if (cookies == null) 
     throw new IOException(); 

    for (String cookie : cookies) 
    { 
     if (cookie.startsWith("authcookie")) 
      return cookie; // this is the only correct path out. 
    } 
    throw new IOException(); 
} 

HTTPGETの例では、リクエストにCookie値を追加するためのhttpヘッダーに注意してください。

public static InputStream getDataFromHTTP(String url, String authenticationCookie, String  mimetype) throws ClientProtocolException, IOException 
{  
    DefaultHttpClient client = getHttpClient();  

    if (client == null) 
     throw new IOException("Cant getHttpClient()"); 

    if (url == null) 
     throw new IOException("URL is null"); 

    HttpGet httpget = new HttpGet(url); 
    httpget.addHeader("Accept", mimetype); 
    httpget.addHeader("Cookie", authenticationCookie);  
    httpget.addHeader("Accept-Encoding", "gzip"); 
    HttpResponse response = client.execute(httpget); 

    InputStream instream = response.getEntity().getContent(); 
    Header contentEncoding = response.getFirstHeader("Content-Encoding"); 

    if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) { 
     instream = new GZIPInputStream(instream); 
    } 

    return instream; 
} 
関連する問題