What are the differences in their functionality/feature set? What are their pros and cons?
Aside from the difference in maintainership pointed out by Ortomala Lokni (which I might add is only accurate for the original ConsoleKit, there is a fork called ConsoleKit2 which is actively maintained), there are a handful of mostly minor differences:
- Configuration is handled differently. ConsoleKit has it's own configuration directory, while elogind uses the same configuration locations as systemd-logind.
- Exact functionality is slightly different. I don't remember all of the specifics here, but it's mostly minor stuff that is not widely used.
- The DBus API's are sufficiently different that most software needs to be built to use one or the other. I'm pretty sure most of this is just a change to the name of the DBus endpoints, but there might be a few other things too.
- ConsoleKit either doesn't support cgroups, or only supports version one cgroups (if using ConsoleKit2), elogind only supports v2 cgroups.
- Elogind actually needs cgroups, and in fact may have build problems on systems that do not have them configured the way it expects them to be.
According to the official page of ConsoleKit:
ConsoleKit is currently not actively maintained.
The focus has shifted to the built-in seat/user/session management of Software/systemd called systemd-logind!
But if you want to use the features of systemd-logind without systemd, there is elogind for you. According to their official main page:
elogind is the systemd project's logind, extracted to a standalone package. It's designed for users who prefer a non-systemd init system, but still want to use popular software such as KDE/Wayland or GNOME that otherwise hard-depends on systemd.