Cookie Storage Support

<refentry> <refmeta> <refentrytitle>SoupCookieJar</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>LIBSOUP-3.0 Library</refmiscinfo> </refmeta>

<refentrytitle>SoupCookieJar</refentrytitle>

<refname>SoupCookieJar</refname> <refpurpose>Automatic cookie handling for SoupSession</refpurpose>

<refsect1> <title>Functions</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><returnvalue>SoupCookieJar</returnvalue> * </entry><entry>soup_cookie_jar_new <phrase>()</phrase></entry></row> <row><entry><returnvalue>char</returnvalue> * </entry><entry>soup_cookie_jar_get_cookies <phrase>()</phrase></entry></row> <row><entry><returnvalue>GSList</returnvalue> * </entry><entry>soup_cookie_jar_get_cookie_list <phrase>()</phrase></entry></row> <row><entry><returnvalue>GSList</returnvalue> * </entry><entry>soup_cookie_jar_get_cookie_list_with_same_site_info <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_set_cookie <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_set_cookie_with_first_party <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_add_cookie <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_add_cookie_with_first_party <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_add_cookie_full <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_delete_cookie <phrase>()</phrase></entry></row> <row><entry><returnvalue>GSList</returnvalue> * </entry><entry>soup_cookie_jar_all_cookies <phrase>()</phrase></entry></row> <row><entry><returnvalue>SoupCookieJarAcceptPolicy</returnvalue> </entry><entry>soup_cookie_jar_get_accept_policy <phrase>()</phrase></entry></row> <row><entry><returnvalue>void</returnvalue> </entry><entry>soup_cookie_jar_set_accept_policy <phrase>()</phrase></entry></row> <row><entry><returnvalue>gboolean</returnvalue> </entry><entry>soup_cookie_jar_is_persistent <phrase>()</phrase></entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Properties</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><type>SoupCookieJarAcceptPolicy</type></entry><entry>accept-policy</entry><entry>Read / Write</entry></row> <row><entry><type>gboolean</type></entry><entry>read-only</entry><entry>Read / Write / Construct Only</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Signals</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><returnvalue>void</returnvalue></entry><entry>changed</entry><entry>Run First</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Types and Values</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry></entry><entry>SoupCookieJar</entry></row> <row><entry>enum</entry><entry>SoupCookieJarAcceptPolicy</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Object Hierarchy</title> <screen> GObject <phrase>╰──</phrase> SoupCookieJar <phrase>├──</phrase> SoupCookieJarDB <phrase>╰──</phrase> SoupCookieJarText </screen> </refsect1> <refsect1> <title>Implemented Interfaces</title> <para> SoupCookieJar implements SoupSessionFeature.</para> </refsect1> <refsect1><title>Includes</title><synopsis>#include <libsoup/soup.h> </synopsis></refsect1> <refsect1> <title>Description</title> <para>A <type>SoupCookieJar</type> stores <type>SoupCookie</type>s and arrange for them to be sent with the appropriate <type>SoupMessage</type>s. <type>SoupCookieJar</type> implements <type>SoupSessionFeature</type>, so you can add a cookie jar to a session with <function>soup_session_add_feature()</function> or <function>soup_session_add_feature_by_type()</function>.</para> <para>Note that the base <type>SoupCookieJar</type> class does not support any form of long-term cookie persistence.</para> </refsect1> <refsect1> <title>Functions</title> <refsect2> <title>soup_cookie_jar_new ()</title> <programlisting><returnvalue>SoupCookieJar</returnvalue> * soup_cookie_jar_new (<parameter><type>void</type></parameter>);</programlisting> <para>Creates a new <type>SoupCookieJar</type>. The base <type>SoupCookieJar</type> class does not support persistent storage of cookies; use a subclass for that.</para> <refsect3> <title>Returns</title> <para> a new <type>SoupCookieJar</type></para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_get_cookies ()</title> <programlisting><returnvalue>char</returnvalue> * soup_cookie_jar_get_cookies (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter><type>gboolean</type> for_http</parameter>);</programlisting> <para>Retrieves (in Cookie-header form) the list of cookies that would be sent with a request to <parameter>uri</parameter> .</para> <para>If <parameter>for_http</parameter> is <literal>TRUE</literal>, the return value will include cookies marked "HttpOnly" (that is, cookies that the server wishes to keep hidden from client-side scripting operations such as the JavaScript document.cookies property). Since <type>SoupCookieJar</type> sets the Cookie header itself when making the actual HTTP request, you should almost certainly be setting <parameter>for_http</parameter> to <literal>FALSE</literal> if you are calling this.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>uri</para></entry> <entry><para>a <type>GUri</type></para></entry> <entry></entry></row> <row><entry><para>for_http</para></entry> <entry><para>whether or not the return value is being passed directly to an HTTP operation</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para>the cookies, in string form, or <literal>NULL</literal> if there are no cookies for <parameter>uri</parameter> . </para> <para><emphasis>[nullable]</emphasis></para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_get_cookie_list ()</title> <programlisting><returnvalue>GSList</returnvalue> * soup_cookie_jar_get_cookie_list (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter><type>gboolean</type> for_http</parameter>);</programlisting> <para>Retrieves the list of cookies that would be sent with a request to <parameter>uri</parameter> as a <type>GSList</type> of <type>SoupCookie</type> objects.</para> <para>If <parameter>for_http</parameter> is <literal>TRUE</literal>, the return value will include cookies marked "HttpOnly" (that is, cookies that the server wishes to keep hidden from client-side scripting operations such as the JavaScript document.cookies property). Since <type>SoupCookieJar</type> sets the Cookie header itself when making the actual HTTP request, you should almost certainly be setting <parameter>for_http</parameter> to <literal>FALSE</literal> if you are calling this.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>uri</para></entry> <entry><para>a <type>GUri</type></para></entry> <entry></entry></row> <row><entry><para>for_http</para></entry> <entry><para>whether or not the return value is being passed directly to an HTTP operation</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para>a <type>GSList</type> with the cookies in the <parameter>jar</parameter> that would be sent with a request to <parameter>uri</parameter> . </para> <para><emphasis>[transfer full][element-type Soup.Cookie]</emphasis></para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_get_cookie_list_with_same_site_info ()</title> <programlisting><returnvalue>GSList</returnvalue> * soup_cookie_jar_get_cookie_list_with_same_site_info (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter><type>GUri</type> *top_level</parameter>, <parameter><type>GUri</type> *site_for_cookies</parameter>, <parameter><type>gboolean</type> for_http</parameter>, <parameter><type>gboolean</type> is_safe_method</parameter>, <parameter><type>gboolean</type> is_top_level_navigation</parameter>);</programlisting> <para>This is an extended version of <function>soup_cookie_jar_get_cookie_list()</function> that provides more information required to use SameSite cookies. See the <ulink>SameSite cookies spec</ulink> for more detailed information.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>uri</para></entry> <entry><para>a <type>GUri</type></para></entry> <entry></entry></row> <row><entry><para>top_level</para></entry> <entry><para>a <type>GUri</type> for the top level document. </para></entry> <entry><emphasis>[nullable]</emphasis></entry></row> <row><entry><para>site_for_cookies</para></entry> <entry><para>a <type>GUri</type> indicating the origin to get cookies for. </para></entry> <entry><emphasis>[nullable]</emphasis></entry></row> <row><entry><para>for_http</para></entry> <entry><para>whether or not the return value is being passed directly to an HTTP operation</para></entry> <entry></entry></row> <row><entry><para>is_safe_method</para></entry> <entry><para>if the HTTP method is safe, as defined by RFC 7231, ignored when <parameter>for_http</parameter> is <literal>FALSE</literal></para></entry> <entry></entry></row> <row><entry><para>is_top_level_navigation</para></entry> <entry><para>whether or not the HTTP request is part of top level navigation</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para>a <type>GSList</type> with the cookies in the <parameter>jar</parameter> that would be sent with a request to <parameter>uri</parameter> . </para> <para><emphasis>[transfer full][element-type Soup.Cookie]</emphasis></para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_set_cookie ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_set_cookie (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter>const <type>char</type> *cookie</parameter>);</programlisting> <para>Adds <parameter>cookie</parameter> to <parameter>jar</parameter> , exactly as though it had appeared in a Set-Cookie header returned from a request to <parameter>uri</parameter> .</para> <para>Keep in mind that if the <type>SoupCookieJarAcceptPolicy</type> set is either <literal>SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY</literal> or <literal>SOUP_COOKIE_JAR_ACCEPT_GRANDFATHERED_THIRD_PARTY</literal> you'll need to use <function>soup_cookie_jar_set_cookie_with_first_party()</function>, otherwise the jar will have no way of knowing if the cookie is being set by a third party or not.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>uri</para></entry> <entry><para>the URI setting the cookie</para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>the stringified cookie to set</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_set_cookie_with_first_party ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_set_cookie_with_first_party (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter><type>GUri</type> *first_party</parameter>, <parameter>const <type>char</type> *cookie</parameter>);</programlisting> <para>Adds <parameter>cookie</parameter> to <parameter>jar</parameter> , exactly as though it had appeared in a Set-Cookie header returned from a request to <parameter>uri</parameter> . <parameter>first_party</parameter> will be used to reject cookies coming from third party resources in case such a security policy is set in the <parameter>jar</parameter> .</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>uri</para></entry> <entry><para>the URI setting the cookie</para></entry> <entry></entry></row> <row><entry><para>first_party</para></entry> <entry><para>the URI for the main document</para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>the stringified cookie to set</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_add_cookie ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_add_cookie (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>SoupCookie</type> *cookie</parameter>);</programlisting> <para>Adds <parameter>cookie</parameter> to <parameter>jar</parameter> , emitting the 'changed' signal if we are modifying an existing cookie or adding a valid new cookie ('valid' means that the cookie's expire date is not in the past).</para> <para><parameter>cookie</parameter> will be 'stolen' by the jar, so don't free it afterwards.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>a <type>SoupCookie</type>. </para></entry> <entry><emphasis>[transfer full]</emphasis></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_add_cookie_with_first_party ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_add_cookie_with_first_party (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>GUri</type> *first_party</parameter>, <parameter><type>SoupCookie</type> *cookie</parameter>);</programlisting> <para>Adds <parameter>cookie</parameter> to <parameter>jar</parameter> , emitting the 'changed' signal if we are modifying an existing cookie or adding a valid new cookie ('valid' means that the cookie's expire date is not in the past).</para> <para><parameter>first_party</parameter> will be used to reject cookies coming from third party resources in case such a security policy is set in the <parameter>jar</parameter> .</para> <para><parameter>cookie</parameter> will be 'stolen' by the jar, so don't free it afterwards.</para> <para>For secure cookies to work properly you may want to use <function>soup_cookie_jar_add_cookie_full()</function>.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>first_party</para></entry> <entry><para>the URI for the main document</para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>a <type>SoupCookie</type>. </para></entry> <entry><emphasis>[transfer full]</emphasis></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_add_cookie_full ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_add_cookie_full (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>SoupCookie</type> *cookie</parameter>, <parameter><type>GUri</type> *uri</parameter>, <parameter><type>GUri</type> *first_party</parameter>);</programlisting> <para>Adds <parameter>cookie</parameter> to <parameter>jar</parameter> , emitting the 'changed' signal if we are modifying an existing cookie or adding a valid new cookie ('valid' means that the cookie's expire date is not in the past).</para> <para><parameter>first_party</parameter> will be used to reject cookies coming from third party resources in case such a security policy is set in the <parameter>jar</parameter> .</para> <para><parameter>uri</parameter> will be used to reject setting or overwriting secure cookies from insecure origins. <literal>NULL</literal> is treated as secure.</para> <para><parameter>cookie</parameter> will be 'stolen' by the jar, so don't free it afterwards.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>a <type>SoupCookie</type>. </para></entry> <entry><emphasis>[transfer full]</emphasis></entry></row> <row><entry><para>uri</para></entry> <entry><para>the URI setting the cookie. </para></entry> <entry><emphasis>[nullable]</emphasis></entry></row> <row><entry><para>first_party</para></entry> <entry><para>the URI for the main document. </para></entry> <entry><emphasis>[nullable]</emphasis></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_delete_cookie ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_delete_cookie (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>SoupCookie</type> *cookie</parameter>);</programlisting> <para>Deletes <parameter>cookie</parameter> from <parameter>jar</parameter> , emitting the 'changed' signal.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>cookie</para></entry> <entry><para>a <type>SoupCookie</type></para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_all_cookies ()</title> <programlisting><returnvalue>GSList</returnvalue> * soup_cookie_jar_all_cookies (<parameter><type>SoupCookieJar</type> *jar</parameter>);</programlisting> <para>Constructs a <type>GSList</type> with every cookie inside the <parameter>jar</parameter> . The cookies in the list are a copy of the original, so you have to free them when you are done with them.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para>a <type>GSList</type> with all the cookies in the <parameter>jar</parameter> . </para> <para><emphasis>[transfer full][element-type Soup.Cookie]</emphasis></para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_get_accept_policy ()</title> <programlisting><returnvalue>SoupCookieJarAcceptPolicy</returnvalue> soup_cookie_jar_get_accept_policy (<parameter><type>SoupCookieJar</type> *jar</parameter>);</programlisting> <para>Gets <parameter>jar</parameter> 's <type>SoupCookieJarAcceptPolicy</type></para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para> the <type>SoupCookieJarAcceptPolicy</type> set in the <parameter>jar</parameter> </para> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_set_accept_policy ()</title> <programlisting><returnvalue>void</returnvalue> soup_cookie_jar_set_accept_policy (<parameter><type>SoupCookieJar</type> *jar</parameter>, <parameter><type>SoupCookieJarAcceptPolicy</type> policy</parameter>);</programlisting> <para>Sets <parameter>policy</parameter> as the cookie acceptance policy for <parameter>jar</parameter> .</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>policy</para></entry> <entry><para>a <type>SoupCookieJarAcceptPolicy</type></para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3></refsect2>
<refsect2> <title>soup_cookie_jar_is_persistent ()</title> <programlisting><returnvalue>gboolean</returnvalue> soup_cookie_jar_is_persistent (<parameter><type>SoupCookieJar</type> *jar</parameter>);</programlisting> <para>Gets whether <parameter>jar</parameter> stores cookies persistenly.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>a <type>SoupCookieJar</type></para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para> <literal>TRUE</literal> if <parameter>jar</parameter> storage is persistent or <literal>FALSE</literal> otherwise.</para> </refsect3></refsect2> </refsect1>
<refsect1> <title>Types and Values</title> <refsect2> <title>SoupCookieJar</title> <programlisting>typedef struct _SoupCookieJar SoupCookieJar;</programlisting> <para>Class that stores cookies in memory.</para> </refsect2>
<refsect2> <title>enum SoupCookieJarAcceptPolicy</title> <para>The policy for accepting or rejecting cookies returned in responses.</para> <refsect3> <title>Members</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>SOUP_COOKIE_JAR_ACCEPT_ALWAYS</para></entry> <entry><para>accept all cookies unconditionally.</para> </entry> <entry></entry> </row> <row><entry><para>SOUP_COOKIE_JAR_ACCEPT_NEVER</para></entry> <entry><para>reject all cookies unconditionally.</para> </entry> <entry></entry> </row> <row><entry><para>SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY</para></entry> <entry><para>accept all cookies set by the main document loaded in the application using libsoup. An example of the most common case, web browsers, would be: If http://www.example.com is the page loaded, accept all cookies set by example.com, but if a resource from http://www.third-party.com is loaded from that page reject any cookie that it could try to set. For libsoup to be able to tell apart first party cookies from the rest, the application must call <function>soup_message_set_first_party()</function> on each outgoing <type>SoupMessage</type>, setting the <type>GUri</type> of the main document. If no first party is set in a message when this policy is in effect, cookies will be assumed to be third party by default.</para> </entry> <entry></entry> </row> <row><entry><para>SOUP_COOKIE_JAR_ACCEPT_GRANDFATHERED_THIRD_PARTY</para></entry> <entry><para>accept all cookies set by the main document loaded in the application using libsoup, and from domains that have previously set at least one cookie when loaded as the main document. An example of the most common case, web browsers, would be: if http://www.example.com is the page loaded, accept all cookies set by example.com, but if a resource from http://www.third-party.com is loaded from that page, reject any cookie that it could try to set unless it already has a cookie in the cookie jar. For libsoup to be able to tell apart first party cookies from the rest, the application must call <function>soup_message_set_first_party()</function> on each outgoing <type>SoupMessage</type>, setting the <type>GUri</type> of the main document. If no first party is set in a message when this policy is in effect, cookies will be assumed to be third party by default.</para> </entry> <entry></entry> </row> </tbody></tgroup></informaltable> </refsect3></refsect2> </refsect1>
<refsect1> <title>Property Details</title> <refsect2><title>The <literal>“accept-policy”</literal> property</title> <programlisting> “accept-policy” <type>SoupCookieJarAcceptPolicy</type></programlisting> <para>The policy the jar should follow to accept or reject cookies</para> <para>Owner: SoupCookieJar</para> <para>Flags: Read / Write</para> <para>Default value: SOUP_COOKIE_JAR_ACCEPT_ALWAYS</para> </refsect2>
<refsect2><title>The <literal>“read-only”</literal> property</title> <programlisting> “read-only” <type>gboolean</type></programlisting> <para>Whether or not the cookie jar is read-only.</para><para>Owner: SoupCookieJar</para> <para>Flags: Read / Write / Construct Only</para> <para>Default value: FALSE</para> </refsect2> </refsect1>
<refsect1> <title>Signal Details</title> <refsect2><title>The <literal>“changed”</literal> signal</title> <programlisting><returnvalue>void</returnvalue> user_function (<type>SoupCookieJar</type> *jar, <type>SoupCookie</type> *old_cookie, <type>SoupCookie</type> *new_cookie, <type>gpointer</type> user_data)</programlisting> <para>Emitted when <parameter>jar</parameter> changes. If a cookie has been added, <parameter>new_cookie</parameter> will contain the newly-added cookie and <parameter>old_cookie</parameter> will be <literal>NULL</literal>. If a cookie has been deleted, <parameter>old_cookie</parameter> will contain the to-be-deleted cookie and <parameter>new_cookie</parameter> will be <literal>NULL</literal>. If a cookie has been changed, <parameter>old_cookie</parameter> will contain its old value, and <parameter>new_cookie</parameter> its new value.</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>jar</para></entry> <entry><para>the <type>SoupCookieJar</type></para></entry> <entry></entry></row> <row><entry><para>old_cookie</para></entry> <entry><para>the old <type>SoupCookie</type> value</para></entry> <entry></entry></row> <row><entry><para>new_cookie</para></entry> <entry><para>the new <type>SoupCookie</type> value</para></entry> <entry></entry></row> <row><entry><simpara>user_data</simpara></entry> <entry><simpara>user data set when the signal handler was connected.</simpara></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><para>Flags: Run First</para> </refsect2> </refsect1> </refentry>
<refentry> <refmeta> <refentrytitle>SoupCookieJarText</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>LIBSOUP-3.0 Library</refmiscinfo> </refmeta>

<refentrytitle>SoupCookieJarText</refentrytitle>

<refname>SoupCookieJarText</refname> <refpurpose>Text-file-based ("cookies.txt") Cookie Jar</refpurpose>

<refsect1> <title>Functions</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><returnvalue>SoupCookieJar</returnvalue> * </entry><entry>soup_cookie_jar_text_new <phrase>()</phrase></entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Properties</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><type>char</type> *</entry><entry>filename</entry><entry>Read / Write / Construct Only</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Types and Values</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry></entry><entry>SoupCookieJarText</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Object Hierarchy</title> <screen> GObject <phrase>╰──</phrase> SoupCookieJar <phrase>╰──</phrase> SoupCookieJarText </screen> </refsect1> <refsect1> <title>Implemented Interfaces</title> <para> SoupCookieJarText implements SoupSessionFeature.</para> </refsect1> <refsect1><title>Includes</title><synopsis>#include <libsoup/soup.h> </synopsis></refsect1> <refsect1> <title>Description</title> <para><type>SoupCookieJarText</type> is a <type>SoupCookieJar</type> that reads cookies from and writes them to a text file in format similar to Mozilla's "cookies.txt".</para> </refsect1> <refsect1> <title>Functions</title> <refsect2> <title>soup_cookie_jar_text_new ()</title> <programlisting><returnvalue>SoupCookieJar</returnvalue> * soup_cookie_jar_text_new (<parameter>const <type>char</type> *filename</parameter>, <parameter><type>gboolean</type> read_only</parameter>);</programlisting> <para>Creates a <type>SoupCookieJarText</type>.</para> <para><parameter>filename</parameter> will be read in at startup to create an initial set of cookies. If <parameter>read_only</parameter> is <literal>FALSE</literal>, then the non-session cookies will be written to <parameter>filename</parameter> when the 'changed' signal is emitted from the jar. (If <parameter>read_only</parameter> is <literal>TRUE</literal>, then the cookie jar will only be used for this session, and changes made to it will be lost when the jar is destroyed.)</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>filename</para></entry> <entry><para>the filename to read to/write from</para></entry> <entry></entry></row> <row><entry><para>read_only</para></entry> <entry><para><literal>TRUE</literal> if <parameter>filename</parameter> is read-only</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para> the new <type>SoupCookieJar</type></para> </refsect3></refsect2> </refsect1> <refsect1> <title>Types and Values</title> <refsect2> <title>SoupCookieJarText</title> <programlisting>typedef struct _SoupCookieJarText SoupCookieJarText;</programlisting> <para>Subclass of <type>SoupCookieJar</type> that stores cookies in a text file.</para> </refsect2> </refsect1> <refsect1> <title>Property Details</title> <refsect2><title>The <literal>“filename”</literal> property</title> <programlisting> “filename” <type>char</type> *</programlisting> <para>Cookie-storage filename.</para><para>Owner: SoupCookieJarText</para> <para>Flags: Read / Write / Construct Only</para> <para>Default value: NULL</para> </refsect2> </refsect1> </refentry>
<refentry> <refmeta> <refentrytitle>SoupCookieJarDB</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>LIBSOUP-3.0 Library</refmiscinfo> </refmeta>

<refentrytitle>SoupCookieJarDB</refentrytitle>

<refname>SoupCookieJarDB</refname> <refpurpose>Database-based Cookie Jar</refpurpose>

<refsect1> <title>Functions</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><returnvalue>SoupCookieJar</returnvalue> * </entry><entry>soup_cookie_jar_db_new <phrase>()</phrase></entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Properties</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><type>char</type> *</entry><entry>filename</entry><entry>Read / Write / Construct Only</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Types and Values</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <tbody> <row><entry></entry><entry>SoupCookieJarDB</entry></row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1> <title>Object Hierarchy</title> <screen> GObject <phrase>╰──</phrase> SoupCookieJar <phrase>╰──</phrase> SoupCookieJarDB </screen> </refsect1> <refsect1> <title>Implemented Interfaces</title> <para> SoupCookieJarDB implements SoupSessionFeature.</para> </refsect1> <refsect1><title>Includes</title><synopsis>#include <libsoup/soup.h> </synopsis></refsect1> <refsect1> <title>Description</title> <para><type>SoupCookieJarDB</type> is a <type>SoupCookieJar</type> that reads cookies from and writes them to a sqlite database in the new Mozilla format.</para> <para>(This is identical to <literal>SoupCookieJarSqlite</literal> in libsoup-gnome; it has just been moved into libsoup proper, and renamed to avoid conflicting.)</para> </refsect1> <refsect1> <title>Functions</title> <refsect2> <title>soup_cookie_jar_db_new ()</title> <programlisting><returnvalue>SoupCookieJar</returnvalue> * soup_cookie_jar_db_new (<parameter>const <type>char</type> *filename</parameter>, <parameter><type>gboolean</type> read_only</parameter>);</programlisting> <para>Creates a <type>SoupCookieJarDB</type>.</para> <para><parameter>filename</parameter> will be read in at startup to create an initial set of cookies. If <parameter>read_only</parameter> is <literal>FALSE</literal>, then the non-session cookies will be written to <parameter>filename</parameter> when the 'changed' signal is emitted from the jar. (If <parameter>read_only</parameter> is <literal>TRUE</literal>, then the cookie jar will only be used for this session, and changes made to it will be lost when the jar is destroyed.)</para> <refsect3> <title>Parameters</title> <informaltable> <tgroup> <colspec></colspec> <colspec></colspec> <colspec></colspec> <tbody> <row><entry><para>filename</para></entry> <entry><para>the filename to read to/write from, or <literal>NULL</literal></para></entry> <entry></entry></row> <row><entry><para>read_only</para></entry> <entry><para><literal>TRUE</literal> if <parameter>filename</parameter> is read-only</para></entry> <entry></entry></row> </tbody></tgroup></informaltable> </refsect3><refsect3> <title>Returns</title> <para> the new <type>SoupCookieJar</type></para> </refsect3></refsect2> </refsect1> <refsect1> <title>Types and Values</title> <refsect2> <title>SoupCookieJarDB</title> <programlisting>typedef struct _SoupCookieJarDB SoupCookieJarDB;</programlisting> <para>Subclass of <type>SoupCookieJar</type> that stores cookies in a sqlite database.</para> </refsect2> </refsect1> <refsect1> <title>Property Details</title> <refsect2><title>The <literal>“filename”</literal> property</title> <programlisting> “filename” <type>char</type> *</programlisting> <para>Cookie-storage filename.</para><para>Owner: SoupCookieJarDB</para> <para>Flags: Read / Write / Construct Only</para> <para>Default value: NULL</para> </refsect2> </refsect1> </refentry>